Curl POSTリクエストヘッダーを表示しますか?これを行う方法はありますか?


87

Curl Web自動化アプリを構築していますが、POSTアクションの目的の結果が得られないという問題があります。送信している完全なPOSTリクエストを(ヘッダー付きで)表示する方法を理解するのに問題があります。これを検索してきましたが、表示されるのは応答ヘッダーだけです。実際には、これらも必要ですが、Googleで見つけた投稿のいずれにも言及されていないリクエストも必要です。

このようなものを使用してcurlリクエストの結果を表示できることはわかっています(構文がオフの場合はご容赦ください。参照するIDEとコードを使用して仮想マシンを既にシャットダウンしています。

 $result = curl($curl_exect) ;

とにかく、ヘッダー全体を表示する方法についてアドバイスをいただければ幸いです。


回答:


83

次の手順を実行すると、転送に関する情報を確認できます。

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

リクエストの前に、そして

$information = curl_getinfo($curl_exect);

リクエスト後

表示:http//www.php.net/manual/en/function.curl-getinfo.php

で使用することもできCURLOPT_HEADERますcurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

これらは、ヘッダーを使用するいくつかの方法にすぎません。


4
私はこれを試しましたが、POSTの配列を出力するだけなので、正確なヘッダーは表示されず、POSTのみが表示され、受信サーバーが表示するのとまったく同じではないため、トラブルシューティングには理想的ではありません
Rick

5
答えは完全ではありません。リクエストが実行される前に、次のことを行う必要がありますcurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch 2016年

1
これは、サーバーが送り返したものだけを示しています。curl_setopt($ ch、CURLOPT_VERBOSE、true);のようです。サーバーに何を送信したかを確認できます。
Steven Teo 2017年

169

必要なものは次のとおりです。

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers

6
POSTデータもどのように表示できますか?つまり、curl_setopt($ ch、CURLOPT_POSTFIELDS、$ postData);によって追加されます。
ダンダスカレスク2013年

@DanDascalescuデータをPOSTしたので、Curlリクエストを作成するときに、データをキャプチャし直す必要はありません。注:POSTフォーム値は、ヘッダーではなく「フォームデータ」として送信されるため、上記で表示されないのはなぜですか。本当にネットワーク上にあるものを確認する必要がある場合は、WireSharkを試してください。
ジョセフラスト

10

次を使用して、curlによって送信されたすべてのヘッダーをファイルに保存できます。

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);

6

以下を使用して、自分でヘッダーをリクエストすることができます。

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

リクエストを行う方法について書かれたように


投稿してくれてありがとう、私はこれをカールとは別のライブラリとして完全には理解していないと思いますよね?カールだけでこれを行う方法はありますか?そうでない場合は、この方法でそれを行うことを検討します。それは、私がfputsに精通していないということです
Rick

これは実際にPHPのネイティブ機能である
SSHこの

1
生のリクエストのようなものを公開するので、これはクールな答えです。私はいつもcURLを使うように教えられてきました。これは時々インストールする必要があり、常に利用できるとは限らないライブラリです。
アルティマスプライム

2

最近、まったく同じ問題が発生し、Wireshark(ネットワーク監視ツール)をインストールしました。暗号化されたトラフィック(HTTPS)を除いて、これですべてを見ることができます。


2
WireSharkはWinCapまたは別のキャプチャシステムで実行されます。動作するには、アセロスベースのチップセットが必要です。ChromeをインストールしCtrl+Shift+JXHRボタンとファイル名をクリックし、ヘッダーとデータを表示してみませんか。
RobertPitt 2010

Wiresharkを試しましたが、発信Curl POSTトラフィックを取得していないようです
Rick

あなたはローカルサーバーで作業していると思いましたが、そうですか?
greg0ire 2010

ロバート、私はあなたがChromeで言ったことをやろうとしていますが、Ctrl + Shift + 3を実行しても何もしません。これに関する情報を探していますが、関連するものが見つからないようです。Chromeのどの機能ですか。これはアクセスしていますか?ありがとう
リック

わかりました。Chromeでヘッダーを表示することに関してこれを見つけました:google.com/support/forum/p/Chrome/…これにアクセスするにはCtrl + Shift + iを使用すると思います
Rick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.