CommissionJunctionのRESTサービスを使用しています。これには、Authorization
ヘッダーでAPIキーを送信する必要があります。
ヘッダーは次のように設定します。
_$ch = curl_init();
curl_setopt_array($ch, array(
// set url, timeouts, encoding headers etc.
CURLOPT_URL => 'https://....',
// ...
));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: ' . CJ_API_KEY,
'User-Agent: ' . OUR_USER_AGENT
));
$response = curl_exec($ch);
$info = curl_getinfo($ch);
_
問題は、Authorization
ヘッダーが送信されないことです(ローカルURLを使用し、_User-Agent
_ヘッダーが設定されていることを示すvar_export($_SERVER)
を実行してこれをデバッグしましたが、 Authorization
ヘッダー。)
ヘッダー名を_X-Authorization
_に変更すると、送信されますが、サービスは特にAuthorization
ヘッダーを必要とするため、これは役に立ちませんでした。
PHP + cURLを取得して任意のAuthorization
ヘッダーを送信するにはどうすればよいですか?
Authorization
ヘッダーは、PHPの_$_SERVER
_変数に含まれていません。リクエストを適切にデバッグするには、Apache_request_headers()
を使用する必要があります。これは、Authorization
ヘッダーを希望どおりに送信したことを示しています。
その後、問題は、かなり悪いドキュメントを前提として、Authorization
ヘッダーに何を入れるかを正確に把握することに移りました。
クライアントがヘッダーを設定すると、リクエストのAuthorization
-ヘッダーが_$_SERVER
_に含まれます。これが新しいものかどうかはわかりませんが、現在はそうなっています。 HTTPヘッダーは、_$_SERVER
_配列のプレフィックスとして_HTTP_
_が付けられます。これは、以前は見落としていた可能性があります。
また、Apache_request_headers()
は、ApacheをWebサーバーとして使用する場合にのみ定義される関数です。そのため、nginxなどを持っている人は誰もが除外されます。
サーバー側:
_<?php
// server.php
var_dump($_SERVER['HTTP_AUTHORIZATION']);
_
Webサーバーを起動します(PHP 5.4)が必要です:
_$ php -S 0.0.0.0:31337 -t .
_
server.phpが現在のディレクトリにあることを確認してください。
CURLを使用してテストします。
_$ curl -H 'Authorization: FOO' http://0.0.0.0:31337/server.php
string(3) "FOO"
_
動作します。 :)