验证码形式:http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h=452300983
验证码来源:http://www.4levelsbux.com/pages/login像这种网站,要如何用CURL模拟登陆,登陆后进行 信息采集。
<?php
$CookieFile = dirname(__FILE__).'/cookie.tmp';
if(isset($_GET["img"])){
$url = 'http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h=452300983';
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_COOKIEJAR, $CookieFile);//把返回来的cookie信息保存在文件中
//curl_setopt($ch, CURLOPT_REFERER, "http://localhost/learn/curltest/verifycode.php");
//设置请求的来源(referrer)
curl_exec($ch);
curl_close($ch);
exit();
}
//=========================================================?>
<form id="form1" name="form1" method="post" action="">
<img src="?img=true" /><!--由服务器端取图片内容并输出-->
<input type="text" name="d" />
<input type="submit" name="button" id="button" value="提交" />
</form>
搞大半天没搞出来,请教高手。
验证码来源:http://www.4levelsbux.com/pages/login像这种网站,要如何用CURL模拟登陆,登陆后进行 信息采集。
<?php
$CookieFile = dirname(__FILE__).'/cookie.tmp';
if(isset($_GET["img"])){
$url = 'http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h=452300983';
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_COOKIEJAR, $CookieFile);//把返回来的cookie信息保存在文件中
//curl_setopt($ch, CURLOPT_REFERER, "http://localhost/learn/curltest/verifycode.php");
//设置请求的来源(referrer)
curl_exec($ch);
curl_close($ch);
exit();
}
//=========================================================?>
<form id="form1" name="form1" method="post" action="">
<img src="?img=true" /><!--由服务器端取图片内容并输出-->
<input type="text" name="d" />
<input type="submit" name="button" id="button" value="提交" />
</form>
搞大半天没搞出来,请教高手。
http://www.4levelsbux.com/pages/login
2.将页面内的
this.src="/pages/captcha?t=s&s=standard&h=109750452"; this.onclick=""; this.style.cursor="default"; getObject("captcha").focus();
取出
3.拼装成
http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h=109750452
4.访问3的url 即可得到验证码的图.
我就是这样做的。但在 保存cookie,输出到本地的时候,图片严重变形
通过culr和我4楼的步骤 取得图片我已经测试通过了.图片没发现有严重变形的问题,不知道你说的严重变形是个什么意思
取出/pages/captcha?t=s&amp;s=standard&amp;h=109750452 后,用我提问中的代码,输出图片如下
将你的代码按照我4楼的步骤写一次,然后将你的代码post出来.
为什么 直接GET不行,还需要POST
不好意思 post 是说将你的代码贴出来.我洗澡去了,回头看看你的代码
$url = "http://www.4levelsbux.com/pages/login";
$ch = curl_init($url); //初始化
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$contents = curl_exec($ch);
//使用正则和分割,得到验证码地址最后的编号 如:702224513
//----验证码参数读取完毕//----输出验证码
$CookieFile = dirname(__FILE__).'/cookie.tmp';
if(isset($_GET["img"])){
$codurl = 'http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h=814258691';
$ch = curl_init($codurl);
curl_setopt($ch,CURLOPT_COOKIEJAR, $CookieFile);//把返回来的cookie信息保存在文件中
//curl_setopt($ch, CURLOPT_REFERER, "http://localhost/learn/curltest/verifycode.php");
//设置请求的来源(referrer)
curl_exec($ch);
curl_close($ch);
exit();
}
echo "<img src=\"?img=true\" width=\"111\" height=\"44\" />";
就是不知道为什么,输出的图片是严重变形的,还请不怕麻烦,不惜指教,
$cookie_file = dirname(__FILE__).'/cookie.txt';
$url = "http://www.4levelsbux.com/pages/login";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.1; CIBA)");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
$data=curl_exec($ch);
curl_close($ch);
preg_match('/this.src="\/pages\/captcha\?t=s&s=standard&h=([\d]+)"/is',$data,$matcharr);
$number=$matcharr[1];
$url="http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h={$number}";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,FALSE);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$response = curl_exec($ch);
curl_close($ch);
header('Content-type: image/jpeg');
echo $response;
手册:
CURLOPT_COOKIEFILE 包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
CURLOPT_COOKIEJAR 连接结束后保存cookie信息的文件。
之所以变形,是对方服务器没有接收到 cookie PHPSESSID
<img style="cursor:pointer;" src="/images/captcha_waiting.jpg" align="absmiddle" onclick="this.src="/pages/captcha?t=s&s=standard&h=758495425"; this.onclick=""; this.style.cursor="default"; getObject("captcha").focus();" width="111" height="44">这个图片是on_click之后替换上去的src,你直接抓onclick="this.src"后面这个网址,拼成http://www.4levelsbux.com/pages/captcha?t=s&s=standard&h=452300983这种形式就可以读到图片了.
嗯。这样把图片取到本地了,但怎么载入表单。我想加入form表单进行POST提交,但浏览器中看不到表单,也无法看源文件
难道玛瑙登陆时,直接调用$response?
把读来的图片, file_put_contents放到一个文件里, 然后在表单里加一个type="image" src="图片文件URL"就行了。
估计楼主是雇佣了一堆廉价劳动力, 希望给它们发工钱让它们帮你敲网站的验证码。过程:1,用户访问你的表单呈现页面
2,你的表单呈现页面去外国网站拉回cookie和验证码图片
3, 将cookie值存到当前访问表单呈现页面的用户session中
4,将验证码图片存储到文件系统内
5,表单呈现页面生成表单+验证码URL
6,廉价劳动力填写表单,根据图片输入验证码
7,廉价劳动力提交表单,服务端根据SESSION里记录的COOKIE向外国网站发起post请求完成外国网站的登录
8,完成外国网站登录了,你再返回什么页面给你的廉价劳动力由你决定,反正外国网站的会话COOKIE在廉价劳动力的SESSION里存储了,之后的操作都可以进一步以已登录身份操作外国网站了,当然还都是PHP端curl在工作。
2,你的表单呈现页面去外国网站拉回cookie和验证码图片
3, 将cookie值存到当前访问表单呈现页面的廉价劳动力session中
4,将验证码图片存储到文件系统内
5,表单呈现页面生成表单+验证码URL
6,廉价劳动力填写表单,根据图片输入验证码
7,廉价劳动力提交表单,服务端根据SESSION里记录的COOKIE向外国网站发起post请求完成外国网站的登录
8,完成外国网站登录了,你再返回什么页面给你的廉价劳动力由你决定,反正外国网站的会话COOKIE在廉价劳动力的SESSION里存储了,之后的操作都可以进一步以已登录身份操作外国网站了,当然还都是PHP端curl在工作。
呵呵,你的点子不错,猜测也很大胆。不过我还没那个技术啊。还在 curl初级阶段,努力刻苦学习中,还希望能得到前辈们的悉心指导,毕竟我没有进学校学过计算机专业,都是在家自个摸索学习,不正规,也不系统。
fiddler抓一下登录提交的http请求, 对照着页面上表单看看是不是有什么额外的JS控制.