2011-08-03 27 views
7

ポストデータを含むを含むフルリクエストヘッダを表示するには、libcurlをPHPで使用しますか?私は、ブラウザから行われ、ライブHTTPヘッダーに表示したページのポストをシミュレートしようとしていますPOSTデータを含むcURLリクエストヘッダを表示

は次のようになります。

https://###.com 
POST /###/### HTTP/1.1 
Host: ###.###.com 
...snipped normal looking headers... 
Content-Type: multipart/form-data; boundary=---------------------------28001808731060 
Content-Length: 697 
-----------------------------28001808731060 
Content-Disposition: form-data; name="file_data"; filename="stats.csv" 
Content-Type: text/csv 
id,stats_id,scope_id,stat_begin,stat_end,value 
61281,1,4,2011-01-01 00:00:00,2011-12-31 23:59:59,0 
-----------------------------28001808731060 
Content-Disposition: form-data; name="-save" 
Submit 
-----------------------------28001808731060-- 

だから我々はうまく私がアップロードしてるファイルを参照してください、それはですコンテンツ、すべてがそこにあります。コンテンツに

POST /###/### HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Host: ###.###.com 
...snipped normal-looking headers... 
Content-Length: 697 
Content-Type: multipart/form-data; boundary=----------------------------e90de36c15f5 

をベースに:しかし、私はPHPから同じポストを作ってみるのcURLからデータを取得し、すべての私の試みはそうのように、ポストデータが不足しているリクエストヘッダを表示(CURLOPT_VERBOSE、またはCURLINFO_HEADER_OUTを使用して)長さはここではうまくいくようですが、完全な要求を見るにはデバッグ作業に本当に役立ちます。私はそれが困難であることも気になります、私は全体を見ることができるはずです。私は何かが欠けているに違いないと知っている。

--- EDIT ---私が探している何

thisのと同等です:

libcurlの中のオプションCURLOPT_DEBUGFUNCTIONで利用可能であるように思わ
curl --trace-ascii debugdump.txt http://www.example.com/ 

が、ISN」 tはPHPで実装されています。ブー。

答えて

1

multipart/formdataを送信しています。 cURLは基本的には完全に私が推測するHTTPヘッダーを示しています。 「問題」は、複数パート/フォームデータが複数の部分で構成されていることです。これは「第1レベルのHTTPヘッダー」と「メインのHTTP本体」の本体の一部を超えています。

あなたの環境はわかりませんが、TCPトラフィックの監視でもデバッグできます。このため、Wiresharkまたはtcpdumpを使用できます。Wiresharkは、tcpdumpによって作成されたダンプファイルを表示することもできます。

+2

これは非常に便利です、ありがとうございました。 cURLからのリクエストの「メインHTTPボディ」に関する情報を取得することはまだ可能であると思われます。 – Chris

5

私はこれを正確に行う必要がありましたが、私は銀行とのコミュニケーションをテストする必要がありました。

HTTPSトラフィックの復号化を可能にする、Fiddler2をを非常に使いやすいです、そしてこのような状況でのデバッグのためのプロキシとしてのcURL使用Fiddler2をを持っている:

$proxy = '127.0.0.1:8888'; 
curl_setopt($ch, CURLOPT_PROXY, $proxy); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
+0

情報ありがとう!私は次回それを試みます。 – Chris

+0

Fiddler2がHTTPSトラフィックを傍受して復号化するために、Fiddler2が独自の証明書を使用するため、cURLをすべての証明書を一時的に受け入れるように設定することを忘れないでください。私はそれが次のようなものだと信じています:curl_setopt($ ch、CURLOPT_SSL_VERIFYPEER、false); – mk12