J'ai utilisé cette syntaxe pour publier un fichier avec quelques paramètres:
curl -v -include --form "key1=value1" --form upload=localfilename URL
Le fichier mesure environ 500 Ko. Tout d'abord, je vois que la longueur du contenu est de 254 du côté émission. Plus tard, la longueur du contenu de la réponse du serveur est de 0. Où est-ce que je me trompe?
Voici la trace complète de la commande.
* 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
Réponses:
La syntaxe suivante le corrige pour vous:
la source
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
pour télécharger un fichier en utilisant curl dans Windows, j'ai trouvé que le chemin nécessite des guillemets doubles échappés
par exemple
la source
"
, c'est dans mon cas sur Mac que je devrais l'envoyer commecurl -X POST -F key1=value1 -F 'image=@"/Users/ivkremer/Downloads/file name.jpg"'
;curl -F "filename=@\"C:\temp\file.jpg\"" https://someurl.com
C'est ce qui a fonctionné pour moi
la source
J'ai eu du mal à envoyer une requête HTTP PUT en plusieurs parties avec
curl
un backend Java. J'ai simplement essayéet le contenu du fichier était
mais j'ai toujours eu une erreur indiquant que la limite était incorrecte. Après un débogage du backend Java, j'ai découvert que l'implémentation Java ajoutait un
\r\n--
comme préfixe à la limite, donc après avoir changé mon fichier d'entrée entout fonctionne bien!
tl; dr
Ajoutez une nouvelle ligne (CRLF
\r\n
) au début du contenu de la limite en plusieurs parties et--
au début des limites et réessayez.Peut-être que vous envoyez une demande à un backend Java qui a besoin de ces changements dans la limite.
la source
\n
place de\r\n
. Même la copie mitmproxy que cURL utilisait\n
, j'ai donc dû copier la requête brute avec mitmproxy. J'ai vu avec hexdump qu'il utilisait du code hexadécimal0A
au lieu de0D 0A
.\r\n
est obligatoire. Regardez tools.ietf.org/html/rfc2046#section-5.1.1 page 19.Sur Windows 10, curl 7.28.1 dans PowerShell, j'ai trouvé que ce qui suit fonctionne pour moi:
la source