0

以下に示すように、ページ (server.php) をカールさせ、ヘッダーに 3 つの変数 ($webServiceId $hash および $timestamp) を送信しようとしています。server.php のヘッダーから 2 つの変数を取得して、それらを処理して応答を送信するにはどうすればよいですか? ここでググって検索してみましたが、方法がわからないようです。

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'server.php');
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: URL-Encoded-API-Key {$webServiceId},{$hash},{$timestamp}"));
$response = curl_exec($ch);
curl_close ($ch);
// dump response
print_r( $response );

server.php が、受信したヘッダーを応答でエコーする場合、$response の print_r は次のようになります。

HTTP/1.1 200 OK Date: Thu, 02 Aug 2012 22:18:59 GMT Server: LiteSpeed Connection: close X-Powered-By: PHP/5.3.14 Allow: GET

Authorization: URL-Encoded-API-Key はそこにありません。curl ヘッダーの設定が間違っている可能性はありますか?

4

3 に答える 3

0

私は使用したことがありませんgetallheaders()が、ドキュメントには、現在のリクエストのヘッダーが読み取られると記載されていますが、これはあなたが行っていることではありません。

答えはここにあります: PHP cURLは単一のリクエストで応答ヘッダーと本文を取得できますか?

すべてのヘッダーを文字列として取得し、それを展開した後strstr()、値を取得するために、または正規表現を使用してそれぞれを調べます。

于 2012-08-02T21:46:59.300 に答える
0

この関数getallheaders()は完全なリクエスト ヘッダーを返します。から呼び出すとserver.php、cURL で送信されたカスタム ヘッダーを受信できるはずです。

http://php.net/manual/en/function.getallheaders.php

編集

ちなみに、引用符が必要ですserver.php

curl_setopt($ch, CURLOPT_URL, 'server.php');

編集2

2 つのスクリプトを使用してテストしました。

client.php

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1/server.php');
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: URL-Encoded-API-Key 12,12113132,1330032113"));
$response = curl_exec($ch);
curl_close ($ch);

// dump response
var_dump( $response );

サーバー.php

var_dump(getallheaders());

呼び出すclient.phpと、次の応答が返されます。

array(3) {
  ["Host"]=>
  string(9) "127.0.0.1"
  ["Accept"]=>
  string(3) "*/*"
  ["Authorization"]=>
  string(42) "URL-Encoded-API-Key 12,12113132,1330032113"
}

私の推測では、カスタム ヘッダーの形式が正しくありません。単純なヘッダーを使用してみて、それが機能するかどうかを確認してください。

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: 123456"));
于 2012-08-02T21:16:26.000 に答える
0

あなたはそれを間違っています。「CURLOPT_HEADER」は、出力にリクエスト ヘッダーとレスポンス ヘッダーを表示するブール値です。ヘッダーの配列を想定し、リクエストでヘッダーを渡すために使用される「CURLOPT_HTTPHEADER」を使用する必要があります。

見てください:http://www.php.net/manual/en/function.curl-setopt.php

于 2012-08-02T22:34:26.123 に答える