Eu usei essa sintaxe para postar um arquivo junto com alguns parâmetros:
curl -v -include --form "key1=value1" --form upload=localfilename URL
O arquivo tem cerca de 500 K de tamanho. Primeiro de tudo, vejo o comprimento do conteúdo em 254 no lado da transmissão. Mais tarde, o tamanho do conteúdo da resposta do servidor é 0. Onde estou errado?
Aqui está o rastreamento completo do comando.
* 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
Respostas:
A sintaxe a seguir corrige isso para você:
fonte
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
para carregar um arquivo usando curl no Windows, descobri que o caminho requer aspas duplas de escape
por exemplo
fonte
"
, no meu caso no Mac devo enviá-lo comocurl -X POST -F key1=value1 -F 'image=@"/Users/ivkremer/Downloads/file name.jpg"'
;curl -F "filename=@\"C:\temp\file.jpg\"" https://someurl.com
Isto é o que funcionou para mim
fonte
Foi difícil enviar uma solicitação HTTP PUT de várias partes
curl
para um back-end Java. Eu simplesmente tenteie o conteúdo do arquivo foi
mas sempre recebia um erro informando que o limite estava incorreto. Após alguma depuração de back-end do Java, descobri que a implementação do Java estava adicionando um
\r\n--
como prefixo ao limite, portanto, depois de alterar meu arquivo de entrada paratudo funciona bem!
tl; dr
Adicionar uma nova linha (CRLF
\r\n
) no início do conteúdo do limite de várias partes e--
no início dos limites e tente novamente.Talvez você esteja enviando uma solicitação para um back-end Java que precisa dessas alterações no limite.
fonte
\n
vez de\r\n
. Até a cópia mitmproxy como cURL estava usando,\n
então tive que copiar a solicitação bruta com mitmproxy. Eu vi no hexdump que ele estava usando código hexadecimal em0A
vez de0D 0A
.\r\n
é necessária. Veja tools.ietf.org/html/rfc2046#section-5.1.1 página 19.No Windows 10, enrolar 7.28.1 no PowerShell, achei o seguinte para trabalhar para mim:
fonte