我现在用其他编程语言(delphi)做了一个工具、尝试向某网站采集一些信息、不过要获取信息需要用户登录、登录需要一个验证码、于是我做了下面的工作:
(采用indy中的idhttp控件实现、允许cookies)1.设置各种头信息(UserAgent,Referer等等)
2.GET验证码(地址形式为xxx.php?act=init)
3.设置好一个要发送的包
4.向表单提交地址(user.action.php?action=login)以POST形式发送但是无论如何、网站均返回结果验证码错误、请问这可能是什么原因、因为我对PHP不太了解、服务端一般这个是怎么验证的?我概念里验证码的实现都是在服务端创建一个session、然后把用户提交与之前保存的对比、这样在参数传递过程中唯一涉及的就是一个session id、我看了下保存在cookies中的session id一直没有改变过、没有理由会说验证码失败.....求高手解释

解决方案 »

  1.   

    验证码如果你的delphi程序没有写识别那么你就自己在上面做一个验证码人工输入,之后登录后让程序再开始采集吧. 还是你的程序已经做了这部分而提示验证码失败,那么就先跟一下数据看看是否正常登录了。
      

  2.   

    你用抓包工具、或者浏览器插件如httpwatch firebug等,看看是如何提交数据的用程序完全模拟即可听你描述,有可能是cookie出了点问题通常不会在HTTP header 头域里传递数据,如果通不过,你也可以注意下
      

  3.   


    嗯、现在就是这样的、已经是一模一样了、实在不知道为什么会提示验证码错误、我曾经也碰到过几次、不知道是不是巧合、凡是出现这种情况的都是PHP的网站...
      

  4.   

    一模一样?你的delphi是什么版本?
      

  5.   

    http://www.netgamecar.com/reg/
    就是这个注册....
      

  6.   


    如果不急过两天给你看看,手头上的事情太多了。开发过不少桌面应用程序 对idhttp模拟登录这块有点心得.希望过两天空了能帮你解决问题.你可以先试一下ICS是否有问题.
      

  7.   

    POST出去的数据你也抓包对比了吗?我做过一个在表单提交的时候先把验证码加密后提交的 还有就是在提交的时候加入一些hidden 的字段做验证 都是用js来控制的还有你在Get验证码的时候伪造header的内容了吗?
      

  8.   

    [email protected]
    源码发你邮箱了。
      

  9.   


    先谢谢你了、不过你的EXE我试了下、依旧提示验证码错误、难道是我网络环境问题?理应没这个问题、浏览器注册是正常的、我是采用路由器上网的、并且把自己的电脑设置成DMZ主机了、
      

  10.   


    那这个就解释不通了、我家是网通4M光钎、通过TP-Link TL-R402路由共享上网的、系统是Windows7你发的这个我找网上的一些测试了下、大部分人都是OK的、但也有极少一部分人和我一样、一直提示验证码错误...
      

  11.   

    竟然找到结症我就不参合了,是不是win7的问题?
      

  12.   


    似乎原因不是太明确、可能是路由的问题、我刚才把路由的frame升级了一下、然后找了另外一台电脑连到这个路由下、测试成功、我再次用我自己的电脑测试也成功了、真是不好意思耽误大家这么多时间、结贴了、分数不多、早知道弄100分了