Saya menggunakan sintaks ini untuk mengirim file bersama dengan beberapa parameter:
curl -v -include --form "key1=value1" --form upload=localfilename URL
Ukuran file sekitar 500 ribu. Pertama-tama, saya melihat panjang konten 254 di sisi pengiriman. Kemudian panjang konten respons server adalah 0. Di mana saya salah?
Ini adalah jejak lengkap dari perintah.
* 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
Jawaban:
Sintaks berikut memperbaikinya untuk Anda:
sumber
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
untuk mengunggah file menggunakan curl di Windows, saya menemukan bahwa path membutuhkan tanda kutip ganda yang diloloskan
misalnya
sumber
"
, itu dalam kasus saya di Mac saya harus mengirimnya seperticurl -X POST -F key1=value1 -F 'image=@"/Users/ivkremer/Downloads/file name.jpg"'
;curl -F "filename=@\"C:\temp\file.jpg\"" https://someurl.com
Inilah yang bekerja untuk saya
sumber
Saya mengalami kesulitan mengirim permintaan PUT HTTP multi bagian dengan
curl
ke Java backend. Saya hanya mencobadan isi file itu
tapi saya selalu mendapat kesalahan bahwa batas itu salah Setelah beberapa debug backend Java saya menemukan bahwa implementasi Java menambahkan
\r\n--
sebagai awalan ke batas, jadi setelah mengubah file input saya kesemuanya bekerja dengan baik!
tl; dr
Tambahkan baris baru (CRLF
\r\n
) di awal konten batas multi bagian dan--
di awal batas dan coba lagi.Mungkin Anda mengirim permintaan ke backend Java yang membutuhkan perubahan dalam batas ini.
sumber
\n
alih-alih\r\n
. Bahkan salinan mitmproxy seperti yang digunakan CURL\n
jadi saya harus menyalin permintaan mentah dengan mitmproxy. Saya melihat dengan hexdump bahwa itu menggunakan kode hex0A
bukan0D 0A
.\r\n
diperlukan. Lihatlah tools.ietf.org/html/rfc2046#section-5.1.1 halaman 19.Pada Windows 10, curl 7.28.1 dalam PowerShell, saya menemukan hal berikut ini berfungsi untuk saya:
sumber