Wie lade ich eine Datei mit curl hoch, wenn --data-binary in manipulierten Daten vorhanden ist?

Wie lade ich eine Datei mit curl hoch, wenn --data-binary in manipulierten Daten vorhanden ist?

Ich versuche, Dateien auf eine beliebte Website hochzuladen. Ich habe die HTTP-POST-Anfragen mit der Funktion „Als Curl kopieren“ der Chrome-Entwicklertools manipuliert. Wenn der Upload beginnt, erhalte ich diesen Curl-Befehl:

curl 'http://example.com/cgi-bin/upload.pl?upload_id=869ab8e228f7bd92bfaebc6d6bf31470' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://example.com/upload.php?action=gallery&gid=0&title=My+precious+car' -H 'Origin: http://example.com' -H 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAh0xuOK8vajmXWbY' --data-binary $'------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="type"\r\n\r\n1\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="gid"\r\n\r\n0\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="title"\r\n\r\nMy precious car\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="resize"\r\n\r\n\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="private"\r\n\r\n\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="cat1"\r\n\r\n24\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="cat2"\r\n\r\n65\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="cat3"\r\n\r\n13\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="upfile_0"; filename="1.zip"\r\nContent-Type: application/zip\r\n\r\n\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY\r\nContent-Disposition: form-data; name="upfile_1"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n------WebKitFormBoundaryAh0xuOK8vajmXWbY--\r\n' --compressed

Oder schauen Sie hier:http://pastebin.com/3Jaj0mSs

Wenn ich versuche, dies über die Befehlszeile zu verwenden (nachdem ich mich angemeldet und Cookies, Upload-ID usw. erhalten habe), wird der Datei-Upload-Vorgang nicht gestartet. Ich habe versucht, dem Curl-Befehl „-T 1.zip“ oder „--data-binary @1.zip“ Optionen hinzuzufügen oder einen Dateinamen wie „<1.zip“ zu erstellen, aber ohne Erfolg. Ich erhalte immer die Fehlermeldung: „Senden fehlgeschlagen: Pipe beschädigt“. Der Dateiname 1.zip befindet sich am Ende des Abschnitts „--data-binary“ des langen Befehls. Was kann ich tun, damit Curl in dieser Situation funktioniert und der Datei-Upload korrekt durchgeführt wird?

Antwort1

Ich habe es mir mit Fiddler angesehen und das Problem ist, dass Chrome den Dateiinhalt aus der generierten Curl-Anfrage löscht. Sie müssen ihn also wieder einfügen.

Ich habe es zum Laufen gebrachthttp://www.zippyshare.com/.

Dies ist die von Chrome generierte Curl-Anfrage.

curl "http://www72.zippyshare.com/upload" -H "Origin: http://www.zippyshare.com" -H "Accept-Encoding: gzip,deflate,sdch" -H "Accept-Language: en-US,en;q=0.8" -H "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" -H "Content-Type: multipart/form-data; boundary=----------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7" -H "Accept: */*" -H "Referer: http://www.zippyshare.com/" -H "Cookie: __utma=46003887.80665104.1404275690.1404275690.1404275690.1; __utmb=46003887.1.10.1404275690; __utmc=46003887; __utmz=46003887.1404275690.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not"%"20provided); ziplocale=en" -H "Proxy-Connection: keep-alive" --data-binary '------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="Filename"

Giant_Panda_Tai_Shan.jpg
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="uploadify"

true
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="embPlayerValues"

null
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="Filedata"; filename="Giant_Panda_Tai_Shan.jpg"
Content-Type: application/octet-stream


------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="Upload"

Submit Query
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7--' --compressed

Ich habe die Daten dort, wo sich die Datei befand, in zwei Teile aufgeteilt.

Teil 1:

------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="Filename"

Giant_Panda_Tai_Shan.jpg
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="uploadify"

true
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="embPlayerValues"

null
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7
Content-Disposition: form-data; name="Filedata"; filename="Giant_Panda_Tai_Shan.jpg"
Content-Type: application/octet-stream

.

(Das . stand nicht am Ende, ich habe es gerade hinzugefügt, damit der Codeblock erkennt, dass am Ende der Datei zwei Leerzeilen stehen.)

Teil 2:

.
Submit Query
------------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7--

(Wieder mit dem .)

Außerdem müssen Sie sicherstellen, dass die Dateien im CRLF-Format vorliegen.

Jetzt kannst du laufen

cat part1.txt Giant_Panda_Tai_Shan.jpg part2.txt > complete

Um es dann auszuführen

curl "http://www72.zippyshare.com/upload" -H "Referer: http://www.zippyshare.com/" -H "Origin: http://www.zippyshare.com" -H "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" -H "Content-Type: multipart/form-data; boundary=----------KM7cH2GI3Ef1gL6GI3ei4Ef1Ij5KM7" --data-binary @complete --compressed

Es wird ausgeführt (das Hochladen dauert einige Sekunden) und gibt eine HTML-Bestätigung für den erfolgreichen Upload zurück.

verwandte Informationen