2011-11-25 21:55:40 +0000 2011-11-25 21:55:40 +0000
40
40

Comment envoyer un POST avec le corps, les en-têtes et les paramètres HTTP en utilisant cURL ?

J'ai trouvé beaucoup d'exemples sur la façon d'utiliser des commandes POST simples dans cURL, mais je n'ai pas trouvé d'exemples sur la façon d'envoyer des commandes POST complètes HTTP, qui contiennent :

  • Headers (Authentification de base)
  • HTTP Params (s=1&r=33)
  • Body Data, une chaîne XML

Tout ce que j'ai trouvé est :

echo "this is body" | curl -d "ss=ss&qq=11" http://localhost/

Cela ne fonctionne pas, et il envoie les paramètres HTTP comme corps.

Réponses (2)

58
58
58
2011-11-25 22:24:02 +0000

Les “paramètres” HTTP font partie de l'URL :

"http://localhost/?name=value&othername=othervalue"

L'authentification de base a une option séparée, il n'est pas nécessaire de créer un en-tête personnalisé :

-u "user:password"

Le “corps” du POSTE peut être envoyé soit via --data (pour application/x-www-form-urlencoded) ou --form (pour multipart/form-data) :

-F "foo=bar" # 'foo' value is 'bar'
-F "foo=<foovalue.txt" # the specified file is sent as plain text input
-F "foo=@foovalue.txt" # the specified file is sent as an attachment

-d "foo=bar"
-d "foo=<foovalue.txt"
-d "foo=@foovalue.txt"
-d "@entirebody.txt" # the specified file is used as the POST body

--data-binary "@binarybody.jpg"

Donc, pour résumer :

curl -d "this is body" -u "user:pass" "http://localhost/?ss=ss&qq=11"
``` 0x1&.
16
16
16
2016-08-19 02:59:31 +0000

La réputation n'est pas suffisante pour faire un commentaire, alors laissez cette réponse en espérant qu'elle vous aidera.

curl -L -v --post301 --post302 -i -X PUT -T "${aclfile}" \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  ${host}:${port}${resource}

C'est ce que j'ai utilisé pour une opération de mise en place d'un godet S3. Les en-têtes sont dans -H et le corps qui est un fichier xml est dans ${aclfile} suivant -T. Vous pouvez voir cela sur la sortie :

/aaa/?acl
* About to connect() to 192.168.57.101 port 80 (#0)
* Trying 192.168.57.101...
* Connected to 192.168.57.101 (192.168.57.101) port 80 (#0)
> PUT /aaa/?acl HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.57.101
> Accept: */*
> Date: Thu, 18 Aug 2016 08:01:44 GMT
> Content-Type: application/x-www-form-urlencoded; charset=utf-8
> Authorization: AWS WFBZ1S6SO0DZHW2LRM6U:r84lr/lPO0JCpfk5M3GRJfHdUgQ=
> Content-Length: 323
> Expect: 100-continue
>
< HTTP/1.1 100 CONTINUE
HTTP/1.1 100 CONTINUE

* We are completely uploaded and fine
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
< Content-Type: application/xml
Content-Type: application/xml
< Content-Length: 0
Content-Length: 0
< Date: Thu, 18 Aug 2016 08:01:45 GMT
Date: Thu, 18 Aug 2016 08:01:45 GMT

<
* Connection #0 to host 192.168.57.101 left intact

si les paramètres de l'url contiennent des signes spéciaux comme “+”, utilisez –data-urlencode pour chaque paramètre (contenant des signes spéciaux) de ceux-ci :

curl -G -H "Accept:..." -H "..." --data-urlencode "beginTime=${time}+${zone}" --data-urlencode "endTime=${time}+${zone}" "${url}"