php登陆采集问题,带验证码···

夜班机器人 2011-04-03 06:59:46
服务器没装curl.不然我就用curl了。。百度很多网页之后,我这样做的。

首先在服务器上返回验证码图片,然后手工输入验证码,压入数组后进行登陆,得到返回cookie。然后每次采集内容,都发送一遍cookie

打开真实登陆地址,做一次正常的登陆,用live http headers抓回这样的包。

Host: www.xxx.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://author.xxsy.com/author_login.aspx
Cookie: ASP.NET_SessionId=ksk42e45hwdayz45uuse0s45;
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

username=aaaaaaa&password=123123&verifycode=2613&step=dologin


然后开始制作登陆采集程序。

首先我建立index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>采集</title>
</head>
<body>
<iframe id='img' src="verify.php" scrolling="No" frameborder="0"></iframe>
<form action="get.php" method="POST">
<input type="text" name="verifycode" />
<input type="submit" />
</form>
</body>
</html>

然后建立verify.php

<?php
$url = 'http://www.xxx.com/inc/showCode.aspx';
$referer = 'http://www.xxx.com/';

echo doget($url,$referer,'');

function doget ( $url , $referer , $cookie )
{
$optionget = array ( 'http' => array ( 'method' => "GET" , 'header' => "User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.0.04506; CIBA)\r\nAccept:*/*\r\nReferer:" . $referer . "\r\nCookie:" . $cookie ));
$file = file_get_contents ( $url , false , stream_context_create( $optionget ));
return $file ;
}
?>


最后建立get.php


<?php
$data = array
(
'username' => '我的账号',
'password' => '我的密码',
);
$data['verifycode']=$_POST['verifycode']; //验证码
$data['step']= 'dologin'; //登陆动作标识符

$url = 'http://www.xxx.com/author_login.aspx'; //登陆地址
$referer = 'http://www.xxx.com/';

dologin($url,$data,$referer);

function dologin ( $url , $postdata , $referer ) // post获取cookie值用
{
$optionlogin = array ( 'http' => array ( 'method' => "POST" , 'header' => "User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.0.04506; CIBA)\r\nAccept:*/*\r\nReferer:" . $referer . "\r\nCookie:" . $cookie , 'content' => http_build_query($postdata, '', '&') ,));
$file = file_get_contents ( $url , false , stream_context_create( $optionlogin ));
//在返回的Header里面提取Cookie
preg_match_all( "/Set-Cookie:(.*?)\r\n/" , implode( "\r\n" , $http_response_header ), $cookies );
$cookies = implode( ";" , $cookies [1]);
print_r($cookies) ;
}
?>


最后返回的还是空数据。。发现没有登陆成功,一直提示验证码错误。返回的header里面没有set-cookie项··求各位指点啊··
...全文
269 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜班机器人 2011-04-04
  • 打赏
  • 举报
回复
即:Cookie: ASP.NET_SessionId=ksk42e45hwdayz45uuse0s45;
夜班机器人 2011-04-04
  • 打赏
  • 举报
回复
感谢2楼, 第一次请求验证码就要开始记录cookie.
然后做登陆动作的时候,发出去,然后服务器还会返回一组cookie.组合起来,就可以用登陆状态采集了。
lazyboy_wu 2011-04-03
  • 打赏
  • 举报
回复
个人建议的header options 最好这样写,兼容服务器


$optionget = array ( 'http' => array (
'method' => "GET" ,
'header' => array(
"User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.0.04506; CIBA)",
"Accept:*/*",
"Referer:" . $referer,
"Cookie:" . $cookie
)
));




另外如果你第一次请求验证码的时候,肯定有session相关信息的,那个时候都要记录sessionid了,否则服务器怎么找你的验证信息呢?
ImN1 2011-04-03
  • 打赏
  • 举报
回复
我还没研究完stream,暂时不晓得你的程序

不过理论上在输入验证码的同时就应该发送有效的cookie

验证码本身就依赖session,所以cookie是不能少的
张恩民 老师 的PHP视频教程【www.php100.com】 绝对是PHP教程中的经典。 PHP100视频教程目录(共112集) PHP100视频教程1:环境配置与代码调试 PHP100视频教程2:PHP的数据类型与源码调试 PHP100视频教程3:常用PHP运算类型介绍与应用 PHP100视频教程4: PHP条件语句介绍与应用 PHP100视频教程5:PHP循环语句的介绍与应用 PHP100视频教程6:PHP数组的创建修改应用 PHP100视频教程7:PHP函数和自定义函数 PHP100视频教程8:Mysql 简介和创建新的数据库 PHP100视频教程9:数据库中的常用SQL语句 PHP100视频教程10:MYSQL在PHP5中的应用 PHP100视频教程11:学习制作PHP+MYSQL留言板(上) PHP100视频教程12:学习制作PHP+MYSQL留言板(下) PHP100视频教程13:PHP+MYSQL分页原理 PHP100视频教程14:PHP上传原理及应用 PHP100视频教程15:PHP生成HTML文件原理 PHP100视频教程16:PHP小偷程序原理和实例 PHP100视频教程17:PHP面向对象开发的学习(一) PHP100视频教程18:PHP面向对象开发的学习(二) PHP100视频教程19:PHP面向对象开发的学习(三) PHP100视频教程20:PHP面向对象开发的学习(四) PHP100视频教程21:PHP面向对象开发的学习(五) PHP100视频教程22:PHP面向对象开发的学习(六) PHP100视频教程23:PHP面向对象开发的学习(七) PHP100视频教程24:PHP面向对象开发的学习(八) PHP100视频教程25:PHP面向对象开发的学习(九) PHP100视频教程26:制作自己的PHP+MYSQL的类 PHP100视频教程27:PHP模板引擎Smarty入门使用 PHP100视频教程28:PHP模板引擎Smarty的变量操作符 PHP100视频教程29:PHP模板引擎Smarty内置函数 PHP100视频教程30:PHP模板引擎Smarty缓存应用 PHP100视频教程31:PHP在线编辑器fckeditor应用 PHP100视频教程32:PHP5中Cookie与 Session详解 PHP100视频教程33:PHP5中图片验证码的制作(上) PHP100视频教程34:PHP5中图片中文验证码(下) PHP100视频教程35:PHP5文字图片混合水印与缩略图 PHP100视频教程36:PHP中正则表达式学习及应用(一) PHP100视频教程37:PHP中正则表达式学习及应用(二) PHP100视频教程38:PHP中正则表达式学习及应用(三) PHP100视频教程39:PHP中正则表达式学习及应用(四) PHP100视频教程40:PHP中开发自己的-UBB代码 PHP100视频教程41:PHP站内搜索、多关键字、加亮显示 PHP100视频教程42:PHP通过mail()或Socket发邮件 PHP100视频教程43:PHP中MVC学习之ThinkPHP(上) PHP100视频教程44:PHP中MVC学习之ThinkPHP(下) PHP100视频教程45:如何用PHP开发一个完整的网站 PHP100视频教程46:PHPMyAdmin功能操作详解 PHP100视频教程47:PHP输出CSV和EXCEL两种简单的方法 PHP100视频教程48:Ajax+PHP快速上手及应用 PHP100视频教程49: Ajax+PHP打造等待进度条效果(二) PHP100视频教程50: Ajax+PHP检查用户名或邮件(三) PHP100视频教程51:PHP+MYSQL会员系统的开发(上) PHP100视频教程52:PHP+MYSQL会员系统的开发(下) PHP100视频教程53:PHP如何防止注入及开发安全 PHP100视频教程54:Apache Rewrite 拟静态配置 PHP100视频教程55:PHP5中使用PDO连接数据库 PHP100视频教程56:制作PHP安装程序的原理和步骤 PHP100视频教程57:PHP备份数据库原理和方法 PHP100视频教程58:快速设计一个企业网站之BIWEB PHP100视频教程59:关于BIWEB常见问题和结构分析 PHP100视频教程60:PHP与数据库代码开发规范 PHP100视频教程61:PHP+Mysql新闻系统的开发一 PHP100视频教程62:PHP+Mysql新闻系统的开发二 PHP100视频教程63:PHP+Mysql新闻系统的开发三(上) PHP100视频教程64:PHP+Mysql新闻系统的开发四 PHP100视频教程65:PHP+Mysql新闻系统的开发五 PHP100视频教程66:PHP+Mysql新闻系统的开发六 PHP100视频教程67:PHP+Mysql新闻系统的开发七 PHP100视频教程68:PHP+Mysql新闻系统的开发八 PHP100视频教程69:PHP+Mysql新闻系统的开发九 PHP100视频教程70:PHP 5.3.1 + Apache + Mysql配置 PHP100视频教程71:PHP SQLite 的使用和配置 PHP100视频教程72:PHP+SQLite 常用函数及应用 PHP100视频教程73:PHP MemCached高级缓存配置 PHP100视频教程74:PHP MemCached 高级缓存应用 PHP100视频教程75:Zend framework 配置与调试 PHP100视频教程76:Zend framework 数据库操之读取与插入 PHP100视频教程77:Zend framework数据库操作之编辑和视图函数 PHP100视频教程78:PHP+Flash多文件异步上传 swfupload PHP100视频教程79:PHP上传RAR压缩包并解压目录 PHP100视频教程80:ADODB PHP 数据库万能引擎类(上) PHP100视频教程81:ADODB PHP 数据库万能引擎类(下) PHP100视频教程82: PHP开发通用采集入库程序 PHP100视频教程83: PHP开发通用采集入库程序二 PHP100视频教程84:PHP开发通用采集入库程序三 PHP100视频教程85:PHP 图表类 JPGraph 入门配置与应用 PHP100视频教程86:PHP JPGraph 中文字体和背景设置 PHP100视频教程87:PHP 之 CURL 传输与获取功能 PHP100视频教程88:PHP 之 CURL模拟登陆并获取数据 PHP100视频教程89:PHP XML 的 DOMDocument 读取功能 PHP100视频教程90:PHP DOM 创建生成多功能 XML文件 PHP100视频教程91:PHP修改和删除XML内容的原理和方法 PHP100视频教程92:在线支付接口之PHP支付宝接口开发 PHP100视频教程93:在线支付接口之PHP云网接口开发 PHP100视频教程94:SVN (Subversion) 配置与安装调试 PHP100视频教程95:SVN (Subversion) 应用与技巧 PHP100视频教程96:PHP程序员经典面试&笔试题目解析(上) PHP100视频教程97:PHP程序员经典面试&笔试题目解析(下) PHP100视频教程98:PHP会员权限交叉多类型的控制(上) PHP100视频教程99:PHP会员权限交叉多类型的控制(下) PHP100视频教程100:PHP程序员的学习之路和未来职业规划 PHP100视频教程101:PHP5.3 Xdebug 调试器配置与应用 PHP100视频教程102:PHP5.3 Xdebug 错误分析与性能调试 PHP100视频教程103:JQuery 之 Javascript 基础(一) PHP100视频教程104:JQuery 之 Javascript 基础(二) PHP100视频教程105:JQuery 之 Javascript 基础(三) PHP100视频教程106:JQuery 之语法模式与开发基础 PHP100视频教程107:JQuery 之选择器、事件器详解 PHP100视频教程108:JQuery之各类动画效果的实现 PHP100视频教程109:JQuery 之 Ajax 开发详解 PHP100视频教程110:Jquery案例 之 双下拉框内容移动 PHP100视频教程111:Jquery案例 之 复选框与隔行换色 PHP100视频教程112:Jquery案例 之 双击编辑异步更新
PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 curl获取远程文件内容 GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP XML转数组函数 PHP 缓存函数 PHP 设置COOKIE,并且加密COOKIE函数 PHP不缓存数据头 PHP伪造IP PHP全角半角转换函数 PHP农历函数 PHP分页函数 PHP判断字符串是否UTF8格式 php判断爬虫函数 PHP判断远程文件是否存在 PHP图片处理类:缩略,裁剪,圆角,倾斜 PHP多功能图片处理类 PHP多重判断删除文件函数 PHP实现英文标题的正确大写 PHP常用图片处理类 PHP常用测试函数 PHP得到当周每天日期 PHP文件下载类 PHP无限分类[左右值]算法 PHP显示日期、周几、农历初几、什么节日函数 PHP格式化数据,防止注入函数 PHP模拟登陆 PHP生成唯一标识符函数 PHP生成曲线图函数 PHP生成条形码 PHP统计字符串里单词出现次数 PHP缩略图类,可生成BMP格式 PHP自定义大小验证码函数 PHP获取.NET发出的WEBSERVICE数据 PHP获取FLV文件播放时间函数 PHP获取一年内所有周的开始和结束日期 php获取指定日期所在周的开始和结束日期 PHP读取文件前几个字节 判断文件类型函数 PHP连接ACCESS PHP采集程序中常用的函数 PHP随机产生指定长度中文字符串 SMTP类 url地址参数加密 一些常用验证函数 下拉-单选框选择 创建多级目录 删除数组中相同元素,只保留一个 判断路径是绝对目录还是相对目录 利用PHP搜索指定目录下指定的文件 加密解密 去掉指定的html标签 发送 trackback 数据包 图像处理类 图片验证码生成 字符集转换类 对要输入的字符串进行转换 对要输出的字符串进行反转换 对输入JS进行转换 寻找两个函数所有不同的元素 寻找两数组所有不同元素 得到文件类型 截取字符串中两个特定唯一字符之间的内容 截取指定长度字符串 折线图 按照比例改变图片大小(非生成缩略图) 收藏主页 数据验证类 数组转换成XML格式 日期计算 是否为电子邮件格式 柱形统计图 检查是否为一个合法的时间格式 检测URL地址有效性 检测文件是否图片 检测是否可以以网页形式显示 检测是否序列化后的字符串 模仿JAVASCRIPT的ESCAPE和UNESCAPE函数的功能 用curl函数读取远程文件 用file_getcontents提交数据 用php生成扭曲,有角度的验证图片(支持中文) 用正则加亮关键字 程序运行过程中直接输出 缩略图版权信息函数 缩略图类 获得用户操作系统的换行符 获得用户的真实IP地址 计算字符串的长度(汉字按照两个字符计算) 设为主页 转换附件大小单位 转静态函数 遍历文件夹文件 采集网络数据 随机字符串 验证码 验证码类 验证输入的邮件地址是否合法

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧