QueryList 如何实现 post 登陆请求?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
上一篇文章中,苏南大叔已经讲述了如何发出get()
请求。本篇文章中,苏南大叔继续讲述:如何利用QueryList
发出post()
请求。基本用法和get()
是一致的,就是换了一个名字post()
。
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"
}
post
和get
连贯操作
http
插件默认已经开启了全局cookie
,post
操作和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
总结
querylist
的post
和get
,总是密不可分的。配合起来,会更加实用。更多querylist
相关经验,下面的链接,不如错过。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
试试评论