Ich habe diese Syntax verwendet, um eine Datei zusammen mit einigen Parametern zu veröffentlichen:
curl -v -include --form "key1=value1" --form upload=localfilename URL
Die Datei ist ungefähr 500 KB groß. Zunächst sehe ich auf der Sendeseite eine Inhaltslänge von 254. Später beträgt die Inhaltslänge der Serverantwort 0. Wo gehe ich falsch?
Hier ist die vollständige Ablaufverfolgung des Befehls.
* Couldn't find host xxx.xxx.xxx.xxx in the _netrc file; using defaults
* About to connect() to xxx.xxx.xxx.xxx port yyyy (#0)
* Trying xxx.xxx.xxx.xxx...
* Adding handle: conn: 0x4b96a0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x4b96a0) send_pipe: 1, recv_pipe: 0
* Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) port yyyy (#0)
* POST /zzzzzz/UploadFile HTTP/1.1
* User-Agent: curl/7.32.0
* Host: xxx.xxx.xxx.xxx:yyyy
* Accept: */*
* Content-Length: 254
* Expect: 100-continue
* Content-Type: multipart/form-data; boundary=------------------------948a6137eef50079
*
* HTTP/1.1 100 Continue
* HTTP/1.1 100 Continue
* HTTP/1.1 200 OK
* HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
* Server: Apache-Coyote/1.1
* Server: Apache-Coyote/1.1
* Added cookie JSESSIONID="C1D7DD042E250211D9DEA82688876F88" for domain xxx.xxx.xxx.xxx, path /zzzzz/, expire 0
* Set-Cookie: JSESSIONID=C1D7DD042E250211D9DEA82688876F88; Path=/zzzzzz/;
* HttpOnly
* Set-Cookie: JSESSIONID=C1D7DD042E250211D9DEA82688876F88; Path=/zzzzzz/; HttpOnly
* Content-Type: text/html;charset=ISO-8859-1
Content-Type: text/html;charset=ISO-8859-1
* Content-Length: 0
* Content-Length: 0
* Date: Tue, 01 Oct 2013 11:54:24 GMT
* Date: Tue, 01 Oct 2013 11:54:24 GMT
* Connection #0 to host xxx.xxx.xxx.xxx left intact
Antworten:
Die folgende Syntax behebt das Problem für Sie:
quelle
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
Um eine Datei mit Curl in Windows hochzuladen, stellte ich fest, dass für den Pfad doppelte Anführungszeichen erforderlich sind
z.B
quelle
"
, sollte ich es in meinem Fall auf einem Mac wie folgt sendencurl -X POST -F key1=value1 -F 'image=@"/Users/ivkremer/Downloads/file name.jpg"'
.curl -F "filename=@\"C:\temp\file.jpg\"" https://someurl.com
Das hat bei mir funktioniert
quelle
Es fiel mir schwer, eine mehrteilige HTTP-PUT-Anfrage
curl
an ein Java-Backend zu senden . Ich habe es einfach versuchtund der Inhalt der Datei war
aber ich habe immer den Fehler bekommen, dass die Grenze falsch war. Nach einigem Java-Backend-Debugging stellte ich fest, dass die Java-Implementierung
\r\n--
der Grenze ein Präfix hinzufügte , also nachdem ich meine Eingabedatei in geändert hattealles funktioniert gut!
tl; dr
Fügen Sie
\r\n
am Anfang des mehrteiligen Grenzinhalts und--
am Anfang der Grenzen eine neue Zeile (CRLF ) hinzu und versuchen Sie es erneut.Möglicherweise senden Sie eine Anfrage an ein Java-Backend, das diese Änderungen an der Grenze benötigt.
quelle
\n
anstelle von verwendet wurden\r\n
. Sogar die Mitmproxy-Kopie als cURL wurde verwendet,\n
sodass ich die Rohanforderung mit Mitmproxy kopieren musste. Ich habe mit hexdump gesehen, dass stattdessen Hex-Code0A
verwendet wurde0D 0A
.\r\n
ist erforderlich. Schauen Sie sich tools.ietf.org/html/rfc2046#section-5.1.1 Seite 19.Unter Windows 10, Curl 7.28.1 in Powershell, hat Folgendes für mich funktioniert:
quelle