phpcurl模拟登陆
Ⅰ php模拟登陆知乎
想要爬取知乎,首先要解决的就是登录问题,知乎登录还是比较简单的,这里有一个示例:
https://demo.zjmainstay.cn/php/curl/hulogin.php
而爬取,不过是对登录成功之后的得到的cookie进行再次利用,使用
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file);
即可。
上面示例最后一步获取登录成功后的首页就做了示范。
至于爬取过程对链接(文章链接、专栏链接等)的解析,需要针对来处理了。
解析可以用phpQuery,也可以用正则。
你可以参考我这个全站爬取程序:
https://github.com/Zjmainstay/CurlMulti/blob/webClone/demo/custom/webClone.php
更多关于PHPcURL的内容,请参考《PHPcURL实现模拟登录与采集使用方法详解》
http://www.zjmainstay.cn/php-curl
更深入讨论可以通过我的博客找我。
Ⅱ php 通过curl如何模拟登陆新浪微博
呵呵,我在寻找curl模拟登陆微信公众平台的资料
Ⅲ php curl 模拟登录 响应头cookie 怎么获取
CURLOPT_COOKIEJAR:保存提交后反馈的cookie数据
例:
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
更多关于cURL的用法,请参考我的博客《PHPcURL应用》
http://www.zjmainstay.cn/php-curl
Ⅳ php curl 模拟登录 失败不成功 高手来解救!
请使用SNOOPY,你网络一下就有下载地址了他是对CURL的封装,大网站很多都用这个
Ⅳ php curl 模拟登录并获取数据实例详解
PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。
代码实战
先来看登录部分的代码:
//模拟登录
function
login_post($url,
$cookie,
$post)
{
$curl
=
curl_init();//初始化curl模块
curl_setopt($curl,
CURLOPT_URL,
$url);//登录提交的地址
curl_setopt($curl,
CURLOPT_HEADER,
0);//是否显示头信息
curl_setopt($curl,
CURLOPT_RETURNTRANSFER,
0);//是否自动显示返回的信息
curl_setopt($curl,
CURLOPT_COOKIEJAR,
$cookie);
//设置Cookie信息保存在指定的文件中
curl_setopt($curl,
CURLOPT_POST,
1);//post方式提交
curl_setopt($curl,
CURLOPT_POSTFIELDS,
http_build_query($post));//要提交的信息
curl_exec($curl);//执行cURL
curl_close($curl);//关闭cURL资源,并且释放系统资源
}
函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。
接下来如果登录成功后,我们要获取登录成功后的页面信息。
//登录成功后获取数据
function
get_content($url,
$cookie)
{
$ch
=
curl_init();
curl_setopt($ch,
CURLOPT_URL,
$url);
curl_setopt($ch,
CURLOPT_HEADER,
0);
curl_setopt($ch,
CURLOPT_RETURNTRANSFER,
1);
curl_setopt($ch,
CURLOPT_COOKIEFILE,
$cookie);
//读取cookie
$rs
=
curl_exec($ch);
//执行cURL抓取页面内容
curl_close($ch);
return
$rs;
}
函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。
我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。
//设置post的数据
$post
=
array
(
'email'
=>
'oschina账户',
'pwd'
=>
'oschina密码',
'goto_page'
=>
'/my',
'error_page'
=>
'/login',
'save_login'
=>
'1',
'submit'
=>
'现在登录'
);
//登录地址
$url
=
"http://m.oschina.net/action/user/login";
//设置cookie保存路径
$cookie
=
dirname(__FILE__)
.
'/cookie_oschina.txt';
//登录后要获取信息的地址
$url2
=
"http://m.oschina.net/my";
//模拟登录
login_post($url,
$cookie,
$post);
//获取登录页的信息
$content
=
get_content($url2,
$cookie);
//删除cookie文件
@
unlink($cookie);
//匹配页面信息
$preg
=
"/<td
class='portrait'>(.*)<\/td>/i";
preg_match_all($preg,
$content,
$arr);
$str
=
$arr[1][0];
//输出内容
echo
$str;
使用总结
1、初始化curl;
2、使用curl_setopt设置目标url,和其他选项;
3、curl_exec,执行curl;
4、执行后,关闭curl;
5、输出数据。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
Ⅵ PHP的curl模拟·登录老是失败出现了405错误
405 是指请求的 URL 不支持请求的方法, htm(除伪静态)是静态页面,是只能使用 get 方法的,而你要登录,要用post,而你这里也确实是用的 post,那么我觉得你应该是 URL 取错了。像这种 post 的地址都要是有程序处理的,你再回去看看原来页面中 form 上的 action 地址吧
Ⅶ 如何判断php中curl模拟登陆是否成功
/**
* 模拟登录
*/
//初始化变量
$cookie_file = "tmp.cookie";
$login_url = "";
$verify_code_url = "";
echo "正在获取COOKIE...\n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //获取COOKIE并存储
$contents = curl_exec($curl);
curl_close($curl);
echo "COOKIE获取完成,正在取验证码...\n";
//取出验证码
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);
$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "验证码取出完成,正在休眠,20秒内请把验证码填入code.txt并保存\n";
//停止运行20秒
sleep(20);
echo "休眠完成,开始取验证码...\n";
$code = file_get_contents("code.txt");
echo "验证码成功取出:$code\n";
echo "正在准备模拟登录...\n";
$post = "username=maben&pwd=hahahaha&verifycode=$code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
//这一块根据自己抓包获取到的网站上的数据来做判断
if(substr_count($result,"登录成功")){
echo "登录成功\n";
}else{
echo "登录失败\n";
exit;
}