[ laravel爬虫实战--基础篇 ] guzzle使用响应,获取header以及页面代码

Song7349 次浏览0个评论2017年11月01日

前面的例子里,我们取到了$response变量,或者从Promise得到了响应,Response对象实现了一个PSR-7接口 Psr\Http\Message\ResponseInterface ;包含了很多有用的信息,但是比较乱,那么我们怎么去获取我们想要的信息呢?

你可以获取这个响应的状态码和和原因短语(reason phrase):

$code = $response->getStatusCode(); // 200
$reason = $response->getReasonPhrase(); // OK

你可以从响应获取头信息(header),更多信息直接参考就可以了:

// 判断是否有请求头
if ($response->hasHeader(Content-Length)) {
    echo "It exists";
}
// 从请求头中获取一个参数.
echo $response->getHeader(Content-Length);
// 获取全部的请求头.
foreach ($response->getHeaders() as $name => $values) {
    echo $name . :  . implode(, , $values) . "\r\n";
}

使用getBody方法可以获取响应的主体部分(body),主体可以当成一个字符串或流对象使用

$body = $response->getBody();
// Implicitly cast the body to a string and echo it
echo $body;
// Explicitly cast the body to a string
$stringBody = (string) $body;
// 获取body中的10个字节
$tenBytes = $body->read(10);
// 将正文的剩余内容作为字符串读取。
$remainingBytes = $body->getContents();

下面我们来看一个完成的请求并且获取页面代码的demo

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use GuzzleHttp\Client;

class SpiderController extends Controller
{
    public function test()
    {
        $client = new Client();
        $response = $client->request(GET,"https://phpartisan.cn");
        // 获取头部信息
        $header = $response->getHeaders();
        // 获取html
        $body = $response->getBody();
        // 如果你想直接输出代码,可以取消如下注视
        // dd($header);
        echo $body;
        // 转换为字符串
        $stringBody = (string) $body
        // 从body中读取10字节
        $tenBytes = $body->read(10);
        // 将body内容读取为字符串
        $remainingBytes = $body->getContents();
    }
}

更多相关好文