2

もちろん、私はこれを正確に尋ねたいくつかの質問を読んだことがありますが、それは私にとってはまったくうまくいかなかったと言わざるを得ません。私が達成しようとしていることは

  • PHPとcurlを介して'X-Requested-With:XMLHttpRequest'ヘッダーを送信する
  • PHPおよびcurlを介して他のhttpリクエストヘッダーを送信する

提供されたソリューションは私にはうまくいきませんでした。

正しいhttpリクエストヘッダーを送信していないことをどうやって知ることができますか?

単に

(1)XMLHttpRequest(JQueryクリックのトリガー)によって生成された実際のヘッダーと、FirefoxアドオンのLiveHTTPヘッダーでPHPおよびcurlによってシミュレートされたヘッダーを比較します。

(2)Print_r()-ing$_SERVER変数をターゲットスクリプトに

何が間違っている/私の期待を下回っているのですか?

最初で最も重要なこと:Firefox Live HTTPヘッダーは私のヘッダーをキャプチャしません(ヘッダーが存在しないのと同じように)。

次に、print_r($ _ SERVER)によって:

シミュレートされたヘッダーのいずれかを取得した場合、取得します[HTTP_X_REQUESTED_WITH] => XMLHttpRequest-ではありません: [X_REQUESTED_WITH] => XMLHttpRequest。この問題は、curl_setopt($ ch、CURLOPT_HTTPHEADER、$ curl_header)を介して送信するほとんどすべてのヘッダーで発生します。これらのいずれにも「HTTP」というプレフィックスが付いています(「Header1:value1」-「HTTP_HEADER1」を取得します)。

PHPバージョン5.4.7、CURL7.24.0でXAMPPを使用しています。

私が達成しようとしていることが可能かどうかを尋ね、事前に回答に感謝する前に、私が試した多くのコードソリューションの1つであるコードを提供することは悪い考えではありません。

$curl_header = array('X-Requested-With: XMLHttpRequest');
$data = "name=miloshio"; // just to be sure I'm doing the POST request
$ch = curl_init('http://example.com/test.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
echo $result;

私の質問の要約:

  1. PHPとcurlを介して正確に「X-Requested-With:XMLHttpRequest」ヘッダーを送信することは可能ですか?
  2. PHPとcurlによって送信されるカスタムヘッダーに「HTTP_」プレフィックスを付加することを回避することは可能ですか?
  3. PHPとcurlの使用に関してよく知られている制限はありますか?
4

1 に答える 1

2
  1. Firefox Live HTTPヘッダーは、サーバーからクライアント(ブラウザー)ではなく別のサーバーに送信されるため、ヘッダーは表示されません。

  2. Curlは、 CURLOPT_PROXYを使用して、ヘッダーを正しく送信します。開発にWindowsを使用している場合は、Fiddlerなどのデバッグプロキシを介してcurlトラフィックを送信することができます。Linuxの代替手段があると確信しています。

  3. $ SERVER変数からヘッダーを取得しようとすると、接頭辞がHTTPになります。apache_request_headersを使用して、HTTP_接頭辞なしのヘッダーを取得できます。

于 2012-10-29T09:30:35.350 に答える