使用Guzzle Http Client获取原始标头

时间:2015-07-20 14:03:16

标签: php guzzle

我有URL(http://forexample.com/index),我发送原始标题:

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

使用Guzzle我想得到这个原始标题消息。不幸的是,在请求完成后,我无法在标题之间找到此消息:

$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调用此URL:

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

我得到了所有标题。那么任何想法?

1 个答案:

答案 0 :(得分:2)

Guzzle已为各种代码预定义状态消息。 See here

因此,您的邮件将被基于已发送代码的邮件替换。并且可以通过

获取默认消息
$res->getReasonPhrase();

<强>更新

我知道为什么我们没有得到&#34;有些消息&#34;具有$res->getReasonPhrase();功能。问题(?)位于第76行的here上。

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

在上面的行中,$startLine[2]是您在标头中提供的'Some message',但由于int投放,会产生0并由于以下代码if (!$reason && isset(self::$phrases[$this->statusCode])) { $this->reasonPhrase = self::$phrases[$status]; } else { $this->reasonPhrase = (string) $reason; } 3}}被默认消息替换。

int

我确信int广告投放背后必定有一些原因,但我已将string替换为int以创建here只是为了知道背后是否有任何原因它。我希望他们拒绝我的拉动请求并告诉我为什么我错了,datetime.date铸造确实是正确的。

<强>更新

Pull请求已被接受并已合并到master中。所以在将来的版本中,这个bug就已经修复了。