cURLを使用して、POSTを本文、ヘッダー、およびHTTPパラメーターと共に送信する方法


39

cURLで簡単なPOSTコマンドを使用する方法の例はたくさんありましたが、次の内容を含む完全なHTTP POSTコマンドを送信する方法の例は見つかりませんでした。

  • ヘッダー(基本認証)
  • HTTPパラメータ(s=1&r=33
  • 本文データ、XML文字列

私が見つけたのは:

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

これは機能せず、HTTPパラメーターを本文として送信します。



以下のように感じている可能性のデュープsuperuser.com/questions/149329/...は、 私はこの1つは、ヘッダーについて特定と似ている知っているが、他の質問への回答も、それを扱います。私は通常、そのような古い人気のある質問をだましとしてマークしませんが、これは例外です。完全を期すためにいくつかのものを移動する必要があるかもしれません。
マイケルデュラント

実際、他の答えは非常に具体的に言及していますが--header、これは言及していません
マイケルデュラン

回答:


15

コメントするのに十分な評判がありませんので、これが役立つことを期待して答えとして残してください。

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}

これは、S3バケットACL操作に使用したものです。ヘッダーは-Hにあり、xmlファイルであるbodyは-Tに続く$ {aclfile}にあります。出力からそれを見ることができます:

/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

url paramsに「+」などの特別な記号が含まれる場合、それらのすべてのparam(特別な記号を含む)に--data-urlencodeを使用します。

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

57

HTTPの「パラメータ」はURLの一部です:

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

基本認証には個別のオプションがあり、カスタムヘッダーを作成する必要はありません。

-u "user:password"

POST "body"は--data(for application/x-www-form-urlencoded)または--form(for 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"

したがって、要約すると:

curl -d "this is body" -u "user:pass" "http://localhost/?ss=ss&qq=11"

@Emerson:あるべきです。PHPのモジュールには、元のC libcurlが持つすべての機能があるようで、上記はかなり基本的な機能です。ただし、使用する正確な関数はわかりません。見つからない場合は、Stack Overflowで確認してください。
悲しみ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.