迷一
以前用python做过模拟登录。首先,爬取登录页面html,保持会话;使用xpath或正则匹配获取验证码图片url,将图片保存在本地,利用python第三方图像库将验证码图片显示出来,然后手动输入验证码,再将登录数据post,就可以登录成功了。
迷一
这个就是验证一下是机器还是人的交互
hen_nam
请问大概是怎么解决的?我也遇到这种问题,不知道怎么入手解决
詹慕斯
不是要自己设置 cookie的具体内容,是要设置 cookie 的存储和读取的文件名
qq_清心_3
这是一个php接口哦,因为执行失败了,所以没有页面输出,在登录之后 抓取页面之前也有一个页面 可以输出那个页面看看 对应的json数据,
555名人
//在HTTP请求中包含一个”user-agent”头的字符串
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
加上这句话就可以了!!
THUNDER1
多传了个 验证码,对比服务器验证码。
或者通过 Ajax 先提交验证码验证是否正确。
零点零零一
<?php
/**
* 慕课网视频教学
* 代码实例-PHP-cURL实战
* 实例描述:登录慕课网并下载个人空间页面
*/
$data='email=账号&password=密码&remember=1';
$curlobj = curl_init(); // 初始化
curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/"); // 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true); // 执行之后不直接打印出来
// Cookie相关设置,这部分设置需要在所有会话开始之前设置
date_default_timezone_set('PRC'); // 使用Cookie时,必须先设置时区
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE); //不使用认证
curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, FALSE); //不使用认证
curl_setopt($curlobj, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1); // 这样能够让cURL支持页面链接跳转
curl_setopt($curlobj, CURLOPT_COOKIEFILE, 'cookiefile');
curl_setopt($curlobj, CURLOPT_COOKIEJAR, 'cookiefile');
curl_setopt($curlobj, CURLOPT_COOKIE, session_name() . '=' . session_id());
curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8",
"Content-length: ".strlen($data)
));
$d = curl_exec($curlobj);
curl_setopt($curlobj, CURLOPT_URL, "你想要的页面");
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("Content-type: text/xml"
));
$output=curl_exec($curlobj); // 执行
curl_close($curlobj); // 关闭cURL
echo $output;
?>
慕粉1926294646
curl_setopt($curl,CURLOPT_COOKIE,session_name().'='.session_id());
qq_轻水_0
。。。bug???
qq_洪荣宵_04129888
可以 的
堕落之罪
你打印的是一个本地文件,是静态的,页面头部应该是使用了某种跟后台的交互,所以没有显示登陆
Kisto
China_好备胎
cnzz的用户名和密码字段名应该不是username和password,去百度一下就知道字段名是什么了
China_好备胎
最后两句调换位置
慕瓜5664138
我从来不设置Content-leng,并且也可以正常执行代码。实践出真知,不必纠结。
月老手中线
ajax处理,将需要提交的数据获取并提交给后台,后台处理这个数据。设置CURLOPT_HTTPHEADER头部信息发送给原来站点的地址,直接送上代码
/**
* 模拟登录
* @param string $url 请求的登录url
* @param [type] $cookie cookie名称 此处必须使用绝对路径
* @param string $data 发送的字段
* @return string
*/
function login_get($url,$cookie,$data = "")
{
$curlobj = curl_init();// 初始化
curl_setopt($curlobj, CURLOPT_URL, $url);// 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);// 执行之后不直接打印出来
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300);
date_default_timezone_set('PRC'); // 使用Cookie时,必须先设置时区
curl_setopt($curlobj, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($curlobj, CURLOPT_COOKIEJAR, $cookie); //连接时把获得的cookie存为文件
curl_setopt($curlobj, CURLOPT_COOKIE, session_name().'='.session_id());
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8", "Content-length: ".strlen($data) ));
$rs = curl_exec($curlobj);//执行
curl_close($curlobj);
return $rs;
}
/**
* 获取url页的内容
* @param string $url 需要获取内容页面的URl
* @param [type] $cookie cookie名称
* @return string
*/
function get_content($url, $cookie,$data ="")
{
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, $url);
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300);
date_default_timezone_set('PRC'); // 使用Cookie时,必须先设置时区
curl_setopt($curlobj, CURLOPT_COOKIEFILE, $cookie); //读取cookie
curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8", "Content-length: ".strlen($data) ));
$rs = curl_redir_exec($curlobj); //执行cURL抓取页面内容
curl_close($curlobj);
return $rs;
}
qq_陌路朋友_0
这是很正常的啦 设置了防爬
xe001
这个登录页面和查看个人主页的页面都改了。。
easyfly
你可以抓包啊
关爱程序员健康成长
貌似破不了,除非你先把验证码也搞到了一起传过去;
qq_陈杨_0
http://bbs.csdn.net/topics/390938652
参看这个吧,里面有你想要的答案!
under_the_mask
你好,尝试在PHP程序中加入如下代码:sleep(10),暂停10秒,然后继续执行下面的脚本代码。
小日月
下载的代码里面少了这几行
lu在脚下
让往事随风
大哥,你的账号和密码都出来了,好歹打个马赛克啊。第11行的数据和前面的数据重了,删掉试试,结果是可以出来的,刚刚试成功了
AwayDian
outsider3242
用浏览器开发者工具抓包,发现向哪些网页发送信息
永不言弃050600
看看是不是第18行下面少了3行代码:
curl_setopt($curlobj, CURLOPT_COOKIEFILE, 'cookiefile');
curl_setopt($curlobj, CURLOPT_COOKIEJAR, 'cookiefile');
curl_setopt($curlobj, CURLOPT_COOKIE, session_name() . '=' . session_id());
champion_0001