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

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

Advertisement

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.

Advertisement
Advertisement

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}"
Advertisement

Questions connexes

7
16
19
8
7
Advertisement
Advertisement