以下に示すように、APIを介してWebサービスにリクエストを送信したいのですが、カスタムhttpヘッダー(ハッシュ)を渡す必要があります。CURLを使用しています。コードは機能しているようですが、厳密な応答が得られません。ハッシュ値と関係があると言われていますが、値は正しいように見えますが、渡す方法やコード自体に何か問題がありますか。
<?php
$ttime=time();
$hash="123"."$ttime"."dfryhmn";
$hash=hash("sha512","$hash");
$curl = curl_init();
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Hash:$hash'));
curl_setopt ($curl, CURLOPT_URL, 'http://web-service-api.com/getresult.xml?clientid=456&time=$ttime');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec ($curl);
if ($xml === false) {
die('Error fetching data: ' . curl_error($curl));
}
curl_close ($xml);
echo htmlspecialchars("$xml", ENT_QUOTES);
?>
'Hash:$hash'
は"Hash: $hash"
(二重引用符)または'Hash: '.$hash
のいずれかである必要があります
CURLOPT_URL
で渡されるURLについても同じことが言えます。
PHPでカスタムhttpヘッダーを取得して設定する必要がある場合は、次の短いチュートリアルが非常に役立ちます。
リクエストヘッダーの送信
$uri = 'http://localhost/http.php';
$ch = curl_init($uri);
curl_setopt_array($ch, array(
CURLOPT_HTTPHEADER => array('X-User: admin', 'X-Authorization: 123456'),
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_VERBOSE => 1
));
$out = curl_exec($ch);
curl_close($ch);
// echo response output
echo $out;
カスタムヘッダーの読み取り
print_r(Apache_request_headers());
君は見るべきだ
Array
(
[Host] => localhost
[Accept] => */*
[X-User] => admin
[X-Authorization] => 123456
[Content-Length] => 9
[Content-Type] => application/x-www-form-urlencoded
)
PHP CGIのカスタムヘッダー
.htaccessで
RewriteEngine On
RewriteRule .? - [E=User:%{HTTP:X-User}, E=Authorization:%{HTTP:X-Authorization}]
$ _ SERVERからカスタムヘッダーを読み取る
echo $_SERVER['User'];
echo $_SERVER['Authorization'];
リソース