Я использовал этот синтаксис для публикации файла вместе с некоторыми параметрами:
curl -v -include --form "key1=value1" --form upload=localfilename URL
Файл размером около 500К. Прежде всего, я вижу длину контента 254 на передающей стороне. Позже длина ответа сервера будет равна 0. Куда я иду не так?
Вот полный след команды.
* 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
Ответы:
Следующий синтаксис исправляет это для вас:
источник
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
чтобы загрузить файл с помощью curl в Windows, я обнаружил, что путь требует двойных кавычек
например
источник
"
, то есть в моем случае на Mac я должен отправить его какcurl -X POST -F key1=value1 -F 'image=@"/Users/ivkremer/Downloads/file name.jpg"'
;curl -F "filename=@\"C:\temp\file.jpg\"" https://someurl.com
Это то, что сработало для меня
источник
Мне было трудно отправить многочастный запрос HTTP PUT с
curl
бэкэндом Java. Я просто попробовали содержимое файла было
но я всегда получал ошибку, что граница была неправильной. После некоторой отладки бэкэнда Java я обнаружил, что реализация Java добавляет
\r\n--
префикс к границе, поэтому после изменения моего входного файла навсе работает отлично!
ТЛ; др
Добавьте новую строку (CRLF
\r\n
) в начале содержимого составной границы и--
в начале границ и повторите попытку.Возможно, вы отправляете запрос в бэкэнд Java, который нуждается в этом изменении границы.
источник
\n
вместо\r\n
. В качестве cURL использовалась даже копия mitmproxy,\n
поэтому мне пришлось копировать необработанный запрос с помощью mitmproxy. Я видел с hexdump, что он использует шестнадцатеричный код0A
вместо0D 0A
.\r\n
требуется. Посмотрите на tools.ietf.org/html/rfc2046#section-5.1.1 стр. 19.На Windows 10, curl 7.28.1 в powershell, я нашел следующее, чтобы работать для меня:
источник