cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。本文将介绍cURL的一些特性,以及在PHP中如何运用它使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下四个步骤:1.初始化连接句柄curl_init();2.设置CURL选项curl_setopt() ;3.执行并获取结果curl_exec();4.释放VURL连接句柄curl_close()。cURL实现GET//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://4dn.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
//执行并获取HTML文档内容
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
//打印获得的数据
print_r($output);上述代码中使用到了四个函数curl_init() 和 curl_close() 分别是初始化CURL连接和关闭CURL连接,都比较简单curl_exec() 执行CURL请求,如果没有错误发生,该函数的返回是对应URL返回的数据,以字符串表示满意;如果发生错误,该函数返回 FALSE需要注意的是,判断输出是否为FALSE用的是全等号,这是为了区分返回空串和出错的情况CURL函数库里最重要的函数是curl_setopt(),它可以通过设定CURL函数库定义的选项来定制HTTP请求上述代码片段中使用了三个重要的选项:CURLOPT_URL 指定请求的URL;CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;CURLLOPT_HEADER设置为0表示不返回HTTP头部信息CURL的选项还有很多,可以到PHP的官方网站(http://www.php.net/manual/en/function.curl-setopt.php)上查看CURL支持的所有选项列表cURL实现POST$url = "http://localhost/server.php";
$post_data = array ("username" => "bob","key" => "12345");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
//打印获得的数据
print_r($output);PHP实现的封装<?php
class Curl
{
/**
* @brief get请求
* @param $url 请求的url
* @param array $param 请求的参数
* @param int $timeout 超时时间
* @param int $log 是否启用日志
* @return mixed
*/
public static function get($url, $param=array(), $timeout=10, $log=1)
{
$ch = curl_init();
if (is_array($param)) {
$url = $url . '?' . http_build_query($param);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); // 允许 cURL 函数执行的最长秒数
$data = curl_exec($ch);
if ($log) {
$data .= "rn";
$data .= self::logInfo($ch, $param, $data);
}
curl_close($ch);
return $data;
}
/**
* @brief post请求
* @param $url 请求的url地址
* @param array $param 请求的参数
* @param int $log 是否启用日志
* @return mixed
*/
public static function post($url, $param=array(), $header=array(), $timeout=10, $log=1)
{
$ch = curl_init();
if (is_array($param)) {
$urlparam = http_build_query($param);
} else if (is_string($param)) { //json字符串
$urlparam = $param;
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //设置超时时间
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回原生的(Raw)输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POST, 1); //POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $urlparam); //post数据
if ($header) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
$data = curl_exec($ch);
if ($log) {
$data .= "rn";
$data .= self::logInfo($ch, $param, $data);
}
curl_close($ch);
return $data;
}
/**
* 请求信息记录日志
* @param $ch curl句柄
* @param $request 请求参数
* @param $response 响应结果
*/
private static function logInfo($ch, $request, $response)
{
$info = curl_getinfo($ch);
$resultFormat = "耗时:[%s] 返回状态:[%s] 请求的url[%s] 请求参数:[%s] 响应结果:[%s] 大小:[%s]kb 速度:[%s]kb/s";
$resultLogMsg = sprintf($resultFormat, $info['total_time'], $info['http_code'], $info['url'], var_export($request,true),var_export($response,true), $info['size_download']/1024, $info['speed_download']/1024);
return $resultLogMsg;
}
}用法:// get请求
echo Curl::get('http://www.baidu.com');
// post请求
$arr = Curl::post('http://localhost:9090/test.php', ['a'=>1,'b'=>2]);
print_r($arr);
评论
172条评论255 Lv.1
Android Webkit
Android 9 回复
新人报道
学习一下
中国 移动
99995 Lv.1
Chrome 94.0.4606.71
Windows 回复
看看源码
河北省 移动
信明宇信明宇 Lv.1
Chrome 80
Android 10 回复
嘻嘻嘻
江苏省 移动
123456789 Lv.1
Android Webkit 4.0
Android 12 回复
看看
广西南宁市 电信
VIP客服 Lv.1
Android Webkit 4.0
Android 10 回复
666哈哈哈哈
广东省东莞市 电信
富商大贾好地方 Lv.1
Sogou Explorer
Windows 7 x64 Edition 回复
撒而非糖果色爱国设若干
广东省广州市 移动GSM/TD-SCDMA/LTE全省共用出口
腾讯视频 Lv.3
Chrome 103.0.0.0
Windows 回复
试试看看
贵州省贵阳市小河区 电信
卡斯特罗 Lv.1
Chrome 103.0.0.0
Windows 回复
66666666666666666666666可以
山东省济南市 移动
情怀 Lv.1
Chrome 103.0.5060.114
Windows 回复
1111111111111错不错,味道
广东省深圳市 联通
挂机脚本网fylmq.com Lv.1
Chrome 103.0.0.0
Windows 回复
不错不错,味道好极了
天津市 联通