curl呼び出しを介してHTTPリクエストを使用してヘッダーを送信する方法


1447

Linuxボックス上のApacheサーバーにヘッダーを送信したいと思います。curl呼び出しでこれをどのように達成できますか?


60
例によってhttpリクエストにcurlを使用する方法を学ぶには良い方法があります。Postmanの最新バージョンをダウンロードし、ユーザーインターフェースレベルで任意のhttpリクエスト設定を行い(post、put、get ..たとえば、ヘッダーとjson bodyを使用)、[generate code]をクリックして[curl]オプションを選択します。同等のコマンドラインを提供します。
ヴィニシウスリマ

回答:


512

取得する:

JSONを使用:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource

XMLで:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource

役職:

投稿データ:

curl --data "param1=value1&param2=value2" http://hostname/resource

ファイルをアップロードする場合:

curl --form "fileupload=@filename.txt" http://hostname/resource

RESTful HTTPポスト:

curl -X POST -d @filename http://hostname/resource

サイトにログインする場合(auth):

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

RESTful投稿の@filenameの意味は何ですか?RESTサーバーにファイルをPOSTしていますか?それは私には奇妙に思えます
JesseBoyd 2017年

6
同じことを不思議に思うかもしれない後で到着する人にとって... @表記は、curlリクエストにインライン化するのではなく、ファイルからサーバーに送信するデータを読み取る方法です。ファイル自体をPOSTするのではなく、POSTリクエストの本文としてファイルのコンテンツをPOSTします。
f1dave 2017年

ここでより詳細な回答:stackoverflow.com/questions/14978411/… :)
Amith Koujalgi

1983

man curl

   -H/--header <header>
          (HTTP)  Extra header to use when getting a web page. You may specify
          any number of extra headers. Note that if you should  add  a  custom
          header that has the same name as one of the internal ones curl would
          use, your externally set header will be used instead of the internal
          one.  This  allows  you  to make even trickier stuff than curl would
          normally do. You should not replace internally set  headers  without
          knowing  perfectly well what you're doing. Remove an internal header
          by giving a replacement without content on the  right  side  of  the
          colon, as in: -H "Host:".

          curl  will  make sure that each header you add/replace get sent with
          the proper end of line marker, you should thus not  add  that  as  a
          part  of the header content: do not add newlines or carriage returns
          they will only mess things up for you.

          See also the -A/--user-agent and -e/--referer options.

          This option can be used multiple times to add/replace/remove  multi-
          ple headers.

例:

curl --header "X-MyHeader: 123" www.google.com

-vオプションを追加すると、curlが送信したリクエストを確認できます。


74
複数のヘッダーを送信する場合は、複数の--headerを使用します。これは問題ありません。curlはそれぞれを異なるヘッダーとして解析します。同じ--headerパラメーター内でヘッダーを分離する方法はありません。例:curl --header "Accept:javascript" --header "test:hello" -v www.google.com
Hatoru Hansou

2
人々は例をしたい場合、私はちょうどここにこれを残しておきます:bropages.org
ピーター・ウェストマコット

マニュアルページ(少なくともOSX)に例が含まれるようになりました。例:
#curl

6
@MartinKonicekなど:tldrユーティリティ(brewなどがtldrをインストールする)を強くお勧めします。その唯一の例。例:「-カスタムHTTPメソッドを使用して、追加のヘッダーを含むリクエストを送信します:curl -H 'X-My-Header:123' -X PUT example.com

280

ではPHP

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue'));

または、複数を設定できます。

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue', 'HeaderName2:HeaderValue2'));

1
@James場合によっては正常に機能しますが、CURLが追加のヘッダー "Expect:100-continue"を送信する場合もあります。これを削除する方法についてのアイデアはありますか?
coding_idiot

@coding_idiot:ヘッダー値の配列に「Expect:」を渡して無効にすることができます。例:curl_setopt($ ch、CURLOPT_HTTPHEADER、array( 'HeaderName:HeaderValue'、 'Expect:'));
エーテル

12
OPはPHPの考えについて何も述べていません
hanshenrik

ヘッダー名は大文字のアンダースコア付きで、HTTP_が前に付けられます。たとえば、「protection-token」は「HTTP_PROTECTION_TOKEN」になります。
Bimal Poudel


44

GET(複数のパラメーター):

curl -X  GET "http://localhost:3000/action?result1=gh&result2=ghk"

または

curl --request  GET "http://localhost:3000/action?result1=gh&result2=ghk"

または

curl  "http://localhost:3000/action?result1=gh&result2=ghk"

または

curl -i -H "Application/json" -H "Content-type: application/json"  "http://localhost:3000/action?result1=gh&result2=ghk"

1
ありがとう。この種類のURLの必須の引用符に気づきませんでした。
remat_br 2017年

12

私はポストマンを使っています。

必要な呼び出しをすべて実行します。次に、ポストマンは、カールコードを表示するための便利なツールを提供します。

ターミナルで実行します。 ここに画像の説明を入力してください

ここに画像の説明を入力してください


シェルスクリプトには独自のフォーマット要件があるため、Windowsでシェルスクリプトを使用している場合は、一重引用符または二重引用符のエスケープに注意してください
Thierrydev

postmanは素晴らしいツールですが、Kubernetesポッドのようなグラフィカル環境がない場合は役に立ちません。カールを学び、あなたはいつでも休息をテストすることができます。
ナンフィアン

11

次のように、複数のヘッダー、データ(JSONなど)を送信し、Callメソッド(POST、GET)を単一のCUrl呼び出しに指定することもできます。

curl -X POST(Get or whatever) \
  http://your_url.com/api/endpoint \
  -H 'Content-Type: application/json' \
  -H 'header-element1: header-data1' \
  -H 'header-element2: header-data2' \

......その他のヘッダー................

  -d '{
  "JsonExArray": [
    {
      "json_prop": "1",
    },
    {
      "json_prop": "2",
    }
  ]
}'


7

カスタムヘッダーを送信する場合は、次の方法で送信できます。

curl -v -H @{'custom_header'='custom_header_value'} http://localhost:3000/action?result1=gh&result2=ghk

2

アナコンダてenvirement のコマンドは次のようになります。GET、EXのために:

curl.exe http://127.0.0.1:5000/books 

exのデータを投稿またはパッチします。

curl.exe http://127.0.0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\"rating\":\"2\"}' 

PS:このタイプのエラーを回避するには、jsonデータにバックスラッシュを追加してください=> Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)

この問題を回避するためだけに使用curl.exeするのではcurlなく:

Invoke-WebRequest : Cannot bind parameter 'Headers'. Cannot convert the "Content-Type: application/json" value of type
"System.String" to type "System.Collections.IDictionary".
At line:1 char:48
+ ... 0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\" ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.