2015-07-20 86 views
3

原標題我有URL(http://forexample.com/index),其中我送原標題:掌握狂飲HTTP客戶端

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

隨着狂飲我想這個RAW頭信息。請求完成後,不幸的是我無法找到這條消息標題之間:

$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()); 

比方說,如果我把這個網址與本地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鑄造某種原因,但我已經用string更換int創建pull request只是爲了知道是否有任何理由背後。我希望他們拒絕我的拉請求,並告訴我爲什麼我錯了,並且鑄造的確是正確的。

UPDATE

拉請求已被接受,並在掌握被合併。所以在未來的版本中,這個bug會被修復。

+0

'getReasonPhrase'返回實際與響應代碼相關的「未授權」消息。但我需要得到「一些消息」的消息:) – Bounce

+0

@反彈我已經更新了我的答案。 –

+0

謝謝。所以我會接受你的回答,並按照你的拉動請求狀態。 – Bounce