欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

curl 模拟用户登陆,但有验证码

程序员文章站 2024-01-08 13:13:10
...
我在用curl做一个用户模拟登陆,但是遇到了验证码。我在网上找了很多资料,但都没有解决问题。我想,要模拟登录的思路大概是这样子的:

1、获取页面中的表单,模拟填写登录名和密码;
2、从验证码图片中得到验证码,模拟填写验证码;(这一步获取验证码解决不了)
3、提交cookie和参数进行登录,保存本地cookie;

其中第2步遇到了问题,怎么会的验证码?使用图片识别库吗?还是下载让用户手工输入呢?或者还有其他的办法?

希望做过这类需求的朋友帮帮忙,谢谢~

回复内容:

我在用curl做一个用户模拟登陆,但是遇到了验证码。我在网上找了很多资料,但都没有解决问题。我想,要模拟登录的思路大概是这样子的:

1、获取页面中的表单,模拟填写登录名和密码;
2、从验证码图片中得到验证码,模拟填写验证码;(这一步获取验证码解决不了)
3、提交cookie和参数进行登录,保存本地cookie;

其中第2步遇到了问题,怎么会的验证码?使用图片识别库吗?还是下载让用户手工输入呢?或者还有其他的办法?

希望做过这类需求的朋友帮帮忙,谢谢~

火速解答

  1. 手工输入
  2. 花钱买在线的api在线打码
  3. ocr(不准确,简单的验证码可以,但总体上指望不大)

你可以去 www.uuwise.com 这样的网站,去了解一下验证码打码的黑技术

  • 如果手工打码,用PHP带Cookie取到验证码的值,再设Header("Content-Type: image/jpeg");吐出来, 这里你可以自己结合前端做些小的改善,例如用Ajax Long Poll或webSocket做个实时提醒的小东西,一旦产生新验证码,你的客户端叮咚提示你打验证码,打完,把内容传给CURL类,CURL再模拟你把验证码传给网站。 在PHP中这里有个很强悍的模拟库,叫做snoopy.class.php
  • 如果验证码比较简单(无扭曲、无干扰线、非中文、字符长度是定长、每个验证码字符边界距离等同、噪点小、字体不生僻或你能找到),也就是说,你觉得机器可以根据一定模式识别出来,那么自己用PHP写个OCR,或调用扩展,我不知道有没有OCR扩展你自己找找。自己写也简单,我记得是先把图片二值化,再把每个字母的区域拆分,计算黑色所占比例,和已有字体库对比,网上类似教程太多,自己实践。

http://blog.csdn.net/ugg/article/details/3972368
http://jingyan.baidu.com/article/456c463b66e5320a583144b7.html
http://www.poboke.com/study/php-verification-code-identification-primary.html

相关标签: php curl