2016-08-24 8 views
0

サーバーからの応答がありますが、カスタムヘッダー「ERRCODE」を含んでいますPHP CURLリクエストカスタムヘッダ

Date: Wed, 24 Aug 2016 09:06:04 GMT 
errcode: 1 
Server: nginx/1.8.1 
Connection: keep-alive 
Transfer-Encoding: chunked 

401 Unauthorized 

どのように私はPHP + CURL「ERRCODE」値を使用して入手できますか?

$ch = curl_init($url); 
if ($ch) { 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, true); // we want headers 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
$json = curl_exec($ch); 
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
$transfer = curl_getinfo($ch); 
curl_close($ch); 
} 
echo $httpcode; ?> //200,401 etc 
<pre><?=print_r($transfer);?></pre> //array, no contains "errcode" 
+0

あなたのカールコードを表示すると、テキストレスポンスとして表示されますか? –

答えて

0

cURLには、応答のすべてのヘッダーをコールバック関数に渡すビルトイン機能があります。あなたが関数を定義し、文字列パラメータとしてその名を提供することができるコールバックとして無名関数を使用したくない場合は、代わりに

curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $header) { 
    echo(trim($header) . PHP_EOL); 
    return strlen($header); 
}); 

:あなたはオプションCURLOPT_HEADERFUNCTIONを使用する必要があります。この関数は2つの引数を受け取ります。最初のものはcURLリソースそのもので、2つ目の引数は現在のヘッダです。

NB

:あなたは、配列またはファイルに、どこかに結果を格納 errcodeヘッダの内容のために、そのファイルを検索したい場合がありますので、関数は、ヘッダ毎に一度 実行されます。

NB2:機能return strlen($header);に注意してください)を通過ヘッダの長さを返す必要があります。さもなければcURLは壊れます。

+0

ありがとう!すべてのヘッダーを文字列として取得できました。 「errcode」のみを取得するにはどうすればよいですか? 最新の文字列リストです。配列要素のすべての行を有効にするには、セパレータが必要ですが、それは必要ありません。 –