300实例带你精通正则表达式

HTTP客户端

HTTP客户端用于抓取网页HTML源码。


QueuryList推荐使用GuzzleHttp来作为HTTP客户端,它功能强大、使用简单、支持异步和并发请求,GuzzleHttp使用文档:http://guzzle-cn.readthedocs.io/zh_CN/latest/ 。当然,需要强调的是QueryList并不依赖任何一个HTTP客户端,你可以根据自己的喜好来选择HTTP客户端,如使用:file_get_contentscurl或其它第三方HTTP客户端包。

默认安装好QueryList之后就可以直接使用GuzzleHttp了:

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://www.baidu.com/s', [
    'wd' => 'QueryList'
]);
$html = (string)$res->getBody();

$data = QueryList::html($html)->find('h3')->texts();

QueryList内置的HTTP客户端

为方便使用,QueryList基于GuzzleHttp封装了一些HTTP请求接口,并进行了简化,请求参数与GuzzleHttp一致,在请求参数上有什么不明白的地方可以直接查看GuzzleHttp文档。

目前封装的HTTP接口有:

  • get():GET 请求
  • post():POST请求
  • postJson():POST JSON请求
  • multiGet():并发GET请求
  • multiPost():并发POST请求

用法

get()方法和post()方法用法和参数完全一致,且共享cookie。

$ql = QueryList::get('http://httpbin.org/get?param1=testvalue¶ms2=somevalue');
// 等价于
$ql->get('http://httpbin.org/get',[
    'param1' => 'testvalue',
    'params2' => 'somevalue'
]);

// 发送post请求
$ql = QueryList::post('http://httpbin.org/post',[
    'param1' => 'testvalue',
    'params2' => 'somevalue'
]);

自定义HTTP Header

$ql = QueryList::get('http://httpbin.org/get',[
    'param1' => 'testvalue',
    'params2' => 'somevalue'
],[
    'headers' => [
        'Referer' => 'https://querylist.cc/',
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz'],
        // 携带cookie
        'Cookie'    => 'abc=111;xxx=222'
    ]
]);

更多高级参数

还可以携带更多高级参数,如:设置超时时间、设置代理等。

$ql = QueryList::get('http://httpbin.org/get',[
    'param1' => 'testvalue',
    'params2' => 'somevalue'
],[
    // 设置代理
    'proxy' => 'http://222.141.11.17:8118',
    //设置超时时间,单位:秒
    'timeout' => 30,
    'headers' => [
        'Referer' => 'https://querylist.cc/',
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz'],
        'Cookie'    => 'abc=111;xxx=222'
    ]
]);

$ql->post('http://httpbin.org/post',[
    'param1' => 'testvalue',
    'params2' => 'somevalue'
],[
    'proxy' => 'http://222.141.11.17:8118',
    'timeout' => 30,
    'headers' => [
        'Referer' => 'https://querylist.cc/',
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz'],
        'Cookie'    => 'abc=111;xxx=222'
    ]
]);