2015-07-20 2 views
3

У меня есть URL (http://forexample.com/index), где я отправляю необработанный заголовок:Получение сырья заголовков с Клиентом жрать Http

header("HTTP/1.1 401 Some message"); 

С жрать я хочу, чтобы получить это сообщение сырого заголовка. К сожалению, после того, как запрос будет завершен, я не могу найти это сообщение между заголовками:

$client = new GuzzleHttp\Client(); 

try { 
    $res = $client->post('http://forexample.com/index'); 
} catch (GuzzleHttp\Exception\BadResponseException $e) { 
    // On HTTP response other than 200 Guzzle throws an exception 
    $res = $e->getResponse(); 
} 

var_dump($res->getHeaders()); 

Скажем, если я называю этот URL с родной PHP функции get_headers:

var_dump(get_headers('http://forexample.com/index')); 

я получаю все заголовки. Итак, какие-нибудь идеи?

+0

Разве это не код состояния HTTP, которым вы пользуетесь? –

+0

Нет, я хочу получить сообщение статуса - «Некоторое сообщение». – Bounce

+0

Затем вы после '$ res-> getReasonPhrase()'. Тем не менее, причина фразы абсолютно не нужна, если у вас есть код состояния. Вы не должны полагаться на фразу, только на код состояния, но ваш код является вашим кодом, и вы делаете то, что считаете нужным. Удачи. –

ответ

2

Guzzle Имеет предопределенные сообщения о состоянии для различных кодов. See here.

Таким образом, ваше сообщение будет заменено этим сообщением на основе отправленного кода. И сообщение по умолчанию может быть извлечена путем,

$res->getReasonPhrase(); 

UPDATE

Я знаю, почему мы не получаем «Некоторые сообщения» с $res->getReasonPhrase(); функции. Проблема (?) Лежит here на номер строки 76.

isset($startLine[2]) ? (int) $startLine[2] : null 

В строке выше $startLine[2] является 'Some message' вы указали в заголовке, но из-за int литье, результаты в 0 и из следующего фрагмента кода here заменить по умолчанию.

if (!$reason && isset(self::$phrases[$this->statusCode])) { 
    $this->reasonPhrase = self::$phrases[$status]; 
} else { 
    $this->reasonPhrase = (string) $reason; 
} 

Я уверен, что должен быть какой-то причиной int литья, но я создал pull request, заменив int с string просто знать, если есть причина. Я надеюсь, что они отклонят мой запрос на тягу и скажут мне, почему я ошибаюсь и int Кастинг действительно правильный.

UPDATE

запрос Прицепного был принят и был объединен в мастер. Поэтому в будущей версии эта ошибка была бы исправлена.

+0

'getReasonPhrase' возвращает сообщение« Unauthorized », которое фактически связано с кодом ответа. Но мне нужно получить сообщение «Some message» :) – Bounce

+0

@Bounce Я обновил свой ответ. –

+0

Спасибо. Поэтому я отвечу на ваш ответ и следую вашему статусу запроса на тягу. – Bounce