php通过curl扩展进行模拟登录(含验证码)
以下为本人工作中遇到的需要做的事情,之前也没怎么用过curl,查了好多资料,才稍微弄明白一点;本文所有内容只是自己平日工作的记录,仅供大家参考: <?php
/**
* 模拟登录
*/
header("Content-type: text/html; charset=UTF-8");
//初始化变量
$cookie_file = "valid.tmp";
$login_url = "http://v3.gds.org.cn/login.aspx";
$verify_code_url = "http://v3.gds.org.cn/CheckCodeImg.aspx"; $curl = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //获取COOKIE并存储
$contents = curl_exec($curl);
curl_close($curl); //取出验证码
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl); //保存验证码图片
$fp = fopen("valid.jpg","wb");
fwrite($fp, $data);
fclose($fp);
//这里取出验证码图片后,程序休眠20s,这20s是用来手动查看验证码图片,然后把验证码手动写入当前目录下的code.txt文件中,等待后续读取
sleep(20);
//20s后开始读取刚才手动写入的验证码的TXT文件获得验证码
/*可下载验证码识别工具类,从而识别验证码,此处不再细说*/
$code = file_get_contents('code.txt'); //登录需要验证的参数,根据登录的网站要求而定
$post = array("__VIEWSTATE"=>'/wEPDwUKMjAxNzc1MTA0OA9kFgICAQ8WAh4GYWN0aW9uBQsvbG9naW4uYXNweBYEAgcPDxYCHghJbWFnZVVybAUgL0NoZWNrQ29kZUltZy5hc3B4P2lkPTIxMTk2ODAxMDNkZAIJDw9kFgIeB29uY2xpY2sFH0phdmFTY3JpcHQ6cmV0dXJuIExvZ2luQ2hlY2soKTtkZGMVVyyy1MfXv5mlHnNYOwIzMjm+sDJyRNMHE9LcjvgY',
"__VIEWSTATEGENERATOR"=>'C2EE9ABB',
"__EVENTVALIDATION"=>'/wEdAAUvG4CEDSAeffIfvT8/poMSt93hYdIOB6Ps/2Dq0TZfLrmXzh32huUyxvIXSZRQCCzJEpGhdun6s5y0mjTOD9huCal3PlhY9+LhlDAz50G/x28L/2U/T7kobvkKwEbiPO6upzznZuwcFVVFFeC+TWWb',
"UserID"=>'1444743',
"Pwd"=>'405769',
"KeyCode"=>$code,
"BTM"=>''); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POST,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
?>
php通过curl扩展进行模拟登录(含验证码)的更多相关文章
- 模拟登录神器之PHP基于cURL实现自动模拟登录类
一.构思 从Firefox浏览器拷贝cURL命令(初始页.提交.提交后) 自动分析curl形成模拟登录代码 默认参数:ssl/302/gzip 二.实现 接口 (一)根据curl信息执行并解析结果 p ...
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
- Java模拟登录带验证码的教务系统(原理详解)
一:原理 客户端访问服务器,服务器通过Session对象记录会话,服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求. 我们通过Chrome浏 ...
- PHP cURL 使用cookie 模拟登录
cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...
- PHP cURL应用实现模拟登录与采集使用方法详解
对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...
- [PHP自动化-进阶]002.CURL模拟登录带有验证码的网站
引言:继前文<模拟登录并采集数据>,大家似乎看不过瘾,这会再出一发,模拟实现带验证码网站的登录. 这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者 ...
- php使用curl模拟登录带验证码的网站[开发篇]
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...
- php使用curl模拟登录带验证码的网站
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...
- php_curl模拟登录有验证码实例
<?php/** * @author 追逐__something * @version $id */define('SCRIPT_ROOT',dirname(__FILE__).'/');$ac ...
随机推荐
- Gulp文档入门的文档
Gulp自动化执行文件的操作 首先gulp基于node开发的,先按照node.js,使用npm sudo npm install -g gulp (在全局的范围安装 gulp) gulp --help ...
- 为什么非全站升级HTTPS不可?
升级HTTPS已经是大势所趋,但仍有大量互联网企业犹豫是否要全站升级HTTPS,为此本文梳理了全站升级HTTPS与部分升级HTTPS的优劣势对比,来判断是否真的有必要进行全站HTTPS升级. HTTP ...
- 【CSS Cookbook】笔记摘要(二)
页面元素 使用text-align性质可以居中显示块级元素中的文字.把margin-left和margin-right设为auto时,该元素则会相对于父元素居中显示.但是现在流行的一些较低版本的浏览 ...
- EntityFramework6.X 之DbContex
DbContext 数据库上下文DbContext是ObjectContext代表之一负责管理在运行时从数据库取数据.跟踪数据库的变更.对实体类映射到数据中持久化操作等,表示工作单元和存储库模式的组合 ...
- CPU最核心的电子元件叫做石英晶振
CPU是电子计算机的主要设备之一,是电脑中的核心配件.主要功能是解释计算机指令以及处理计算机软件中的数据.有人会问,你知道CPU里面都有什么吗?我想大家都会说硅晶体,集成度极大的半导体材料.却没有人提 ...
- 如何选择版本控制系统之二---Git的研发应用场
之前写了一篇<如何选择版本控制系统 ---为什么选择Git版本控制系统>,地址是:http://www.cnblogs.com/goldenfish/p/6876864.html,有兴趣的 ...
- 011一对一 唯一外键关联映射_单向(one-to-one)
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...
- Amazing ASP.NET Core 2.0
前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...
- axis2 和 xfire 接口调用问题排查
背景: 1个运营商厂家开发人员离职,我们为了上线对接接口,迁就对方客户端调用.对方客户端框架用的是xfire.调用方式基本为: Service serviceModel = new ObjectS ...
- Java虚拟机原理
1.编译机制 分析和输入到符号表: 词法分析:将代码转化为token序列 语法分析:由token序列生成抽象语法树 输入到符号表:将类中出现的符号输入到类的符号表 注解处理: 处理用户自定义注解,之后 ...