2016-08-24 4 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

Показать ваш curl-код, и вы получаете его как текстовый ответ? –

ответ

0

cURL имеет встроенную функцию, которая будет передавать каждый заголовок ответа на функцию обратного вызова. Вы должны использовать опцию CURLOPT_HEADERFUNCTION:

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

В качестве альтернативы, если вы не хотите использовать анонимную функцию в качестве обратного вызова вы можете определить функцию и обеспечить ее имя в качестве параметра строки. Функция принимает два аргумента - первый из них - сам ресурс cURL, а второй - текущий заголовок.

NB: Функция выполняется один раз в заголовке, так что вы можете сохранить результаты где-то в массиве или файл, а затем искать через этот файл для содержания заголовка errcode.

NB2: Функция необходимо вернуть длину переданного заголовка (обратите внимание на return strlen($header);). В противном случае cURL разрывается.

+0

Спасибо! Мне удалось собрать все заголовки в виде строк. Как мне получить только «код ошибки»? Это последний в списке строк. Чтобы перевернуть каждую строку в элементе массива, нам нужен разделитель, но это не так. –

Смежные вопросы