我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

上一篇文章中,苏南大叔已经讲述了如何发出get()请求。本篇文章中,苏南大叔继续讲述:如何利用QueryList发出post()请求。基本用法和get()是一致的,就是换了一个名字post()

苏南大叔:QueryList 如何实现 post 登陆请求? - querylist-post
QueryList 如何实现 post 登陆请求?(图1-1)

QueryList post($url,$args = null,$otherArgs = [])

Http post插件,用于post表单。

$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'
    ]
]);
echo $ql->getHtml();

输出:

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "param1": "testvalue",
    "params2": "somevalue"
  },
  "headers": {
    "Accept": "application/json",
    "Connection": "close",
    "Content-Length": "34",
    "Content-Type": "application/x-www-form-urlencoded",
    "Cookie": "abc=111;xxx=222",
    "Host": "httpbin.org",
    "Proxy-Connection": "Keep-Alive",
    "Referer": "https://querylist.cc/",
    "User-Agent": "testing/1.0",
    "X-Foo": "Baz"
  },
  "json": null,
  "origin": "222.141.11.17",
  "url": "http://httpbin.org/post"
}

postget连贯操作

http插件默认已经开启了全局cookiepost操作和get操作是cookie共享的,意味着你可以先调用post方法登录,然后get方法就可以采集所有登录后的页面。

$ql = QueryList::post('http://xxxx.com/login',[
    'username' => 'admin',
    'password' => '123456'
])->get('http://xxx.com/admin');
$ql->get('http://xxx.com/admin/page');
//echo $ql->getHtml();

实战:模拟登陆GitHub

下面的这个例子,也是querylist官方网站给出的例子。先登陆github,然后再做个get请求。

$ql = QueryList::getInstance();
//手动设置cookie
$jar = new \GuzzleHttp\Cookie\CookieJar();
//获取到登录表单
$form = $ql->get('https://github.com/login',[],[
    'cookies' => $jar
])->find('form');
//填写GitHub用户名和密码
$form->find('input[name=login]')->val('your github username or email');
$form->find('input[name=password]')->val('your github password');
//序列化表单数据
$fromData = $form->serializeArray();
$postData = [];
foreach ($fromData as $item) {
    $postData[$item['name']] = $item['value'];
}
//提交登录表单
$actionUrl = 'https://github.com'.$form->attr('action');
$ql->post($actionUrl,$postData,[
    'cookies' => $jar
]);
//判断登录是否成功
// echo $ql->getHtml();
$userName = $ql->find('.header-nav-current-user>.css-truncate-target')->text();
if($userName)
{
    echo '登录成功!欢迎你:'.$userName;
}else{
    echo '登录失败!';
}

输出:

登录成功!欢迎你:jae-jae

总结

querylistpostget,总是密不可分的。配合起来,会更加实用。更多querylist相关经验,下面的链接,不如错过。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   querylist