1:在开始实验之前有必要对curl扩展进行一下认识
使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤:
1. 初始化连接句柄; # curl_init()
2. 设置CURL选项(关键); # curl_setopt()
3. 执行并获取结果; #curl_exec()
4. 释放VURL连接句柄。 #curl_close()
下面看一个简单的实例
$ch = curl_init(); // 1. 初始化
curl_setopt($ch,CURLOPT_URL,$url); // 2. 设置选项,定义目标URL
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //设置选项 , 返回url获取的内容
curl_setopt($ch,CURLOPT_HEADER,0); //设置选项 , 不返回HTTP头部信息
$output = curl_exec($ch); // 3. 执行并获取HTML文档内容
//对获取到的内容进行操作
if($output === FALSE ){
echo "CURL Error:".curl_error($ch);
}
curl_close($ch); // 4. 释放curl句柄
下面是curl_setopt选项的常用选项,在下面的实验中将会用到
CURLOPT_URL 需要获取的URL地址,也可以在 curl_init()函数中设置
CURLOPT_HEADER 不返回HTTP头部信息
CURLOPT_COOKIEJAR 连接结束后保存cookie信息的文件。
CURLOPT_COOKIEFILE 包含cookie数据的文件名
CURLOPT_REFERER 伪造来源
CURLOPT_RETURNTRANSFER 将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出
CURLOPT_POST 设置post提交方式
CURLOPT_POSTFIELDS 传递post内容
1. 获取验证码 保存会话cookie为文件
1. 全程开启session(为什么要开启,目的是为了防止访问人数过多,导致的cookie文件被重写)
2. 在当前目录下创建一个cookie文件夹用来存放会话生成的cookie文件
3. 在当前目录下创建一个images文件夹用来存放验证码文件
<?php
session_start(); //开启session,
$id=session_id(); //获取当前session的id,这个id是存放在浏览器的本地cookie中的
$_SESSION['id']=$id; //因为这个id的唯一性,可以解决高访问量时登陆失败的问题
$cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt'; //cookie文件保存的路径 当前路径下的cookie目录
//开始模拟访问验证码页面,获取其cookie
$verify_code_url = "http://xxx.xxx.xxx.xxx/ValidateCodeAction.do"; //这里是验证码地址
$curl = curl_init(); //初始化句柄
curl_setopt($curl, CURLOPT_URL, $verify_code_url); //设置模拟访问的URL
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //保存模拟访问时得到的cookie(这里是关键)
curl_setopt($curl, CURLOPT_HEADER, 0); //不输出头信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //返回文件流
$img = curl_exec($curl); //执行curl
curl_close($curl); //释放资源句柄
$fp = fopen("./images/verifyCode.jpg","w"); //获取到的验证码文件名,为了防止多人同时访问导致的验证码覆盖问题,你可以使用session或生成随机名称来解决问题,这里写死为verifyCode.jpg文件名
fwrite($fp,$img); //写入文件
fclose($fp);
?>