PHP CURL函数笔记

来源:IT星空
访问量:58
发布日期:2022-12-02
$headers = array(
'Content-type: application/x-www-form-urlencoded',
'Origin: https://api.aaaaaaxxxxx.com'
);

$url = "https://api.aaaaaaxxxxx.com/getinfo"; //api地址
$cookie = dirname(__FILE__).'/cookie_curl.txt'; //设置cookie保存的路径
$cookie2 = "PHPSESSID=57repv7kstddddkb6fp7rtr2a2; e2f2e1aaqwe1473f8c3118fa85c7ca9e=WyI1ODE0Nfg4NDEiXQ";

$ch = curl_init(); //初始化curl模块
curl_setopt($ch, CURLOPT_URL, $url); //登录提交的地址
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($ch, CURLOPT_HEADER, 0);//是否显示响应头信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置 HTTP 请求头字段的数组
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否自动显示返回的信息
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);//已经存好的cookie文件
curl_setopt($ch, CURLOPT_COOKIE, $cookie2); // 带上COOKIE请求
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); //设置cookie信息保存在指定的文件夹中
curl_setopt($ch, CURLOPT_POST, 1); //以POST方式提交
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata));//要执行的信息
$rs = curl_exec($ch); //执行curl转去页面内容
print_r($rs); //返回字符串
$Headers = curl_getinfo($ch);
$error1 = curl_error($ch);
curl_close($ch);
print_r($error1);

print_r($rs);


1、请求如要要忽略SSL证书验证,需要加上如下两条语句:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在


2、关于请求头和响应头:
curl_setopt($ch, CURLOPT_HEADER, 0);//是否显示响应头信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置 HTTP 请求头字段的数组

CURLOPT_HEADER是设置响应头数据要不要返回。CURLOPT_HTTPHEADER是发起请求时是否带上header头信息,他的参数$headers是数组形式,格式如上部代码$headers变量。


3、与cookie相关的三个设置项。
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);//已经存好的cookie文件
curl_setopt($ch, CURLOPT_COOKIE, $cookie2); // 带上COOKIE请求
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); //设置cookie信息保存在指定的文件夹中
CURLOPT_COOKIEFILE和CURLOPT_COOKIE两个配置项的作用都是在请求时带上cookie信息,他们的区别是CURLOPT_COOKIEFILE是从指定的文件里读取cookie,他的参数是一个文本文件的路径,如上面代码中的$cookie=dirname(__FILE__).'/cookie_curl.txt';而CURLOPT_COOKIE的作用也是请求时带上cookie信息,他的参数直接就是请求时需要携带的cookie值,如上面$cookie2 = "PHPSESSID=57repv7kstddddkb6fp7rtr2a2; e2f2e1d75da1473f8c3118fa85c7ca9e=WyI1ODE0Nzc5NDEiXQ";这个cookie2变量值的规范是,每个键值对用等号连接,键值对之间用分号分割,分号后边还必须加一个空格。

CURLOPT_COOKIEJAR配置项的作用是把响应数据中的cookie信息保存在指定的文件中。


4、请求时数据发送的方式(在此只讨论post方式),需要设置如下两行代码:
curl_setopt($ch, CURLOPT_POST, 1); //以POST方式提交
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata));//要执行的信息

第一行就不用解释了,第二行配置项CURLOPT_POSTFIELDS的参数可以用http_build_query函数序列成字符串发送,也可以不此函数直接发送数组格式,如果直接发送系统会做处理成字符串格式。但还有一点需要说明的是如果使用函数http_build_query序列化后默认的Content-type是application/x-www-form-urlencoded,如果直接发送数组则Content-type是multipart/form-data


5、调试用的函数:
mixed curl_getinfo ( resource $ch [, int $opt = 0 ] )
curl_getinfo函数的作用是获取最后一次传输的相关信息,如果不设置opt选项,则返回一个关联数组,具体查询下php官网。如果这只了opt选项,则只返回此设置项对应的值。
curl_error()函数作用的查看详细的错误信息,如果没有错误,则返回空字符串。