Anfrage mit Wget posten?

73

Ich möchte wget verwenden, um ein Bild mit dem Authentifizierungstoken 'AUTH_1624582364932749DFHDD' in den Ordner 'test' auf einen entfernten Server hochzuladen.

Dieser Befehl funktioniert nicht (Autorisierung fehlgeschlagen), und ich möchte sicherstellen, dass es nicht um Syntax geht:

wget --post-file=nature.jpg http://ipadress:8080/v1/AUTH_test/test/ --post-data="AUTH_1624582364932749DFHDD"

Irgendwelche Vorschläge?

Dady
quelle

Antworten:

98

Wget unterstützt derzeit nur x-www-form-urlencodierte Daten. --post-filedient nicht zum Übertragen von Dateien als Formularanhänge, sondern erwartet Daten mit dem Formular : key=value&otherkey=example.

--post-dataund --post-filearbeiten Sie auf die gleiche Weise: Der einzige Unterschied besteht darin, --post-datadass Sie die Daten in der Befehlszeile angeben können, während --post-fileSie den Pfad der Datei angeben können, die die zu sendenden Daten enthält.

Hier ist die Dokumentation:

 --post-data=string
       --post-file=file
           Use POST as the method for all HTTP requests and send the specified data
           in the request body.  --post-data sends string as data, whereas
           --post-file sends the contents of file.  Other than that, they work in
           exactly the same way. In particular, they both expect content of the
           form "key1=value1&key2=value2", with percent-encoding for special
           characters; the only difference is that one expects its content as a
           command-line parameter and the other accepts its content from a file. In
           particular, --post-file is not for transmitting files as form
           attachments: those must appear as "key=value" data (with appropriate
           percent-coding) just like everything else. Wget does not currently
           support "multipart/form-data" for transmitting POST data; only
           "application/x-www-form-urlencoded". Only one of --post-data and
           --post-file should be specified.

Ihr Authentifizierungstoken sollte entweder im Header, im Pfad der URL oder in den Daten selbst angegeben werden. Dies muss irgendwo in der Dokumentation des von Ihnen verwendeten Dienstes angegeben werden. In einer POST-Anforderung müssen Sie wie in einer GET-Anforderung die Daten mithilfe von Schlüsseln und Werten angeben. Auf diese Weise kann der Server mehrere Informationen mit bestimmten Namen empfangen. Ähnlich verhält es sich mit Variablen.

Daher können Sie nicht nur ein magisches Token an den Server senden, sondern auch den Namen des Schlüssels angeben. Wenn der Schlüssel "Token" ist, sollte es sein token=YOUR_TOKEN.

wget --post-data 'user=foo&password=bar' http://example.com/auth.php

Sie sollten auch in Betracht ziehen, Curl zu verwenden, wenn Sie können, da es einfacher ist, Dateien damit zu senden. Dafür gibt es im Internet viele Beispiele.

Maxime Chéramy
quelle
Wie kann ich in diesem Fall mein Authentifizierungstoken senden?
Dady
Wenn es sich um ein einfaches HTML-Formular handeln würde, wie würden Sie die Eingabe benennen, die das Token enthält? Denn das sollte sein: token = AUTH_1624582364932749DFHDD
Maxime Chéramy
Ich wollte es sagen @Hasturkun: D
Maxime Chéramy
Nein, es ist kein HTML-Formular, ich möchte das Bild "nature.jpg" auf einen Server hochladen. Dieser Server benötigt ein Token 'AUTH _ *******', um den Benutzer zu identifizieren, also muss ich das senden Datei und das Token (String) mit der POST-Anfrage
Dady
6
Endlich funktioniert es: curl -v -H 'X-Auth-Token: AUTH_tk8c1eecae98e845159cebf69f06bb10f2' ipadress: 8080 / v1 / AUTH_test / test -T nature.jpg
Dady