curl概念
普通用户作为客户端,会通过各种请求获取服务器上的资源,比如:图片、样式,脚本,数据。
PHP里面有一个非常强大的函数库,它们的目的就是让你安全的从远程网站上取回内容。这些函数被称作CURL。现在,你不要被CURL官方页面上大量的东西吓阻,它实际上非常的简单
curl是客户端向服务器请求资源的工具
curl使用场景
- 网页资源
- 编写网页爬虫
- WebService数据接口资源
- 动态获取接口数据,比如天气、号码归属地
- ftp
- 下载ftp服务器里面的文件
- 其他
使用curl发送请求的基本流程
// 1. 初始化、创建了一个curl会话资源,成功返回一个句柄
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net"); //设置URL
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //这是设置是否将响应结果存入变量,1是存入,0是直接echo出
curl_setopt($ch,CURLOPT_HEADER,0);
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
if($output === FALSE ){
echo "CURL Error:".curl_error($ch);
}
// 4. 释放curl句柄
curl_close($ch);
设置选项
通过curl_setopt
方法来设置参数,很重要。但是内容比较多,多地让你看得想吐,还是根据需要熟能生巧吧。简单列几项:
选项 | 说明 |
---|---|
CURLOPT_RETURNTRANSFER | 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE; |
CURLOPT_TIMEOUT | 设置超时限制防止死循环 |
CURLOPT_POST | 提交类型1为post,0为get |
CURLOPT_POSTFIELDS | post数组 |
CURLOPT_USERAGENT | 用户代理 |
CURLOPT_URL | 请求url |
CURLOPT_CUSTOMREQUEST | 请求类型 |
CURLOPT_HEADER | 是否显示状态头 |
curl实例
一个GET请求
/**
*@desc 封闭curl的调用接口,get的请求方式。
*/
function doCurlGetRequest($url,$data,$timeout = 5)
{
if($curl == "" || $timeout <= 0){
return false;
}
$url = $url.'?'.http_bulid_query($data);
$con = curl_init((string)$url);
curl_setopt($con, CURLOPT_HEADER, false);
curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
return curl_exec($con);
}
一个POST请求
/**
* @desc 封装 curl 的调用接口,post的请求方式
*/
function doCurlPostRequest($url,$requestString,$timeout = 5)
{
if($url == '' || $requestString == '' || $timeout <=0){
return false;
}
$con = curl_init((string)$url);
curl_setopt($con, CURLOPT_HEADER, false);
curl_setopt($con, CURLOPT_POSTFIELDS, $requestString);
curl_setopt($con, CURLOPT_POST,true);
curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);
return curl_exec($con);
}
几个demo
//模拟post 提交数据
//传递3个参数 如果是https 就需要将ssl 默认参数修改为 true
public static function Http_post($url,$data,$ssl=FALSE)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if($ssl)
{
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); //对证书中检查ssl加密算法是否存在
}
//curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //自动设置referer
curl_setopt($curl, CURLOPT_POST, 1); //发送一个常规的post 请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // post 提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); //显示返回的header q区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件的形式返回
$tmpInfo = curl_exec($curl); //执行操作
if(curl_errno($curl)){
return FALSE;
}
curl_close($curl); //关闭curl 会话
return $tmpInfo; //返回数据
}
//模拟get 提交数据
//传递一个参数即可 $url 就是需要请求的url地址
public static function Http_get1($url)
{
if (!function_exists('curl_init')) {
die('curl 未开启');
};
$oCurl = curl_init();
if (stripos($url, "https://") !== FALSE) {
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if (intval($aStatus["http_code"]) == 200) {
return $sContent;
} else {
return false;
}
}
//模拟get 提交数据
//传递一个参数即可 $url 就是需要请求的url地址
public static function Http_get($url)
{
$data = file_get_contents($url);
return $data;
}