精选30+云产品,助力企业轻松上云!>>>
- 目录
- 1.前言
- 2.使用前准备
- 3.CURL实战
- 3.1抓取页面
- 3.2替换页面信息
- 3.3调用WebService获取天气
- 4. 封装CURL的API调用类
- 4.1 get方法获取接口数据
- 4.2 post方法获取接口数据
- 4.3 put方法获取接口数据
- 4.4 del方法获取接口数据
- 4.5 patch方法获取接口数据
- 5.总结
1.前言
curl就是利用URL语法在命令行方式下工作的开源文件传输工具,我们能够通过CURL从互联网上获得各种各样的网络资源。下面我们一起学习一下。
2.使用前准备
打开php.ini
查询curl模块有没有打开。
extension=php_curl.dll
3.CURL实战
3.1抓取页面
$ch = curl_init(); //初始化,创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");//设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch); //关闭cURL资源,并且释放系统资源
?>
3.2替换页面信息
$curlobj = curl_init();// 初始化
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com"); // 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true); // 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
$output=curl_exec($curlobj);
curl_close($curlobj);
echo str_replace("百度","php",$output);
?>
3.3调用WebService获取天气
header("Content-Type:text/html; charset=utf-8");
$data = 'theCityName=东莞';
$url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName';
$headerArray = array("application/x-www-form-urlencoded;charset=utf-8", "Content-length: ".strlen($data));
$userAgent = "user-agent:Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0";
$curlobj = curl_init();
curl_setopt($curlobj,CURLOPT_URL, $url);
curl_setopt($curlobj, CURLOPT_USERAGENT, $userAgent);//伪造浏览器信息
curl_setopt($curlobj, CURLOPT_HEADER, 0);//启用时会将头文件的信息作为数据流输出。这里不启用
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);//如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($curlobj, CURLOPT_POST, 1);//如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);//需要POST的数据
curl_setopt($curlobj,CURLOPT_HTTPHEADER, $headerArray);
$rtn = curl_exec($curlobj);
if(!curl_errno($curlobj)){
$info = curl_getinfo($curlobj);
print_r($info);
} else {
echo 'Curl error: ' . curl_error($curlobj);
}
curl_close($curlobj);
?>
其中curl_getinfo()函数获取CURL请求输出的相关信息,返回的是一个关联数组,包含以下数据:
- url:网络地址。
- content_type:内容编码。
- http_code:HTTP状态码。
- header_size:header的大小。
- request_size:请求的大小。
- filetime:文件创建的时间。
- ssl_verify_result:SSL验证结果。
- redirect_count:跳转计数。
- total_time:总耗时。
- namelookup_time:DNS查询耗时。
- connect_time:等待连接耗时。
- pretransfer_time:传输前准备耗时。
- size_uplpad:上传数据的大小。
- size_download:下载数据的大小。
- speed_download:下载速度。
- speed_upload:上传速度。
- download_content_length:下载内容的长度。
- upload_content_length:上传内容的长度。
- starttransfer_time:开始传输的时间表。
- redirect_time:重定向耗时。
4.封装CURL的API调用类
4.1get方法获取接口数据
/**
* 通过get方法获取接口数据
* @param $url
* @return mixed
*/
public function getUrl($url)
{
$headerArray = array("Content-type:application/json;", "Accept:application/json");
$ch = curl_init();// 初始化一个cURL会话。
curl_setopt($ch, CURLOPT_URL, $url);//需要获取的URL地址,也可以在curl_init()函数中设置。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//禁用cURL后从服务端进行验证。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//禁止检查服务器SSL证书
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);//设置HTTP头字段的数组
$output = curl_exec($ch);// 执行一个cURL会话
curl_close($ch);
$output = json_decode($output, true);
return $output;
}
4.2 post方法获取接口数据
/**
* 通过post方法获取接口数据
* @param $url
* @param $data
* @return mixed
*/
public function postUrl($url, $data)
{
$data = json_encode($data);
$headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);// 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//全部数据使用HTTP协议中的"POST"操作来发送。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
$output = curl_exec($curl);
curl_close($curl);
return json_decode($output, true);
}
4.3 put方法获取接口数据
/**
* 通过put方法获取接口数据
* @param $url
* @param $data
* @return mixed
*/
public function putUrl($url, $data)
{
$data = json_encode($data);
$headerArray = array('Content-type:application/json');
$ch = curl_init(); //初始化CURL句柄
curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //设置请求方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置提交的字符串
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
4.4 del方法获取接口数据
/**
* 通过del方法获取接口数据
* @param $url
* @param $data
* @return mixed
*/
public function delUrl($url, $data)
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output, true);
}
4.5 patch方法获取接口数据
/**
* 通过patch方法获取接口数据
* @param $url
* @param $data
* @return mixed
*/
public function patchUrl($url, $data)
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output);
return $output;
}
5.总结
通过上述学习回顾,我们对CURL有了基本的认识和掌握,能够使用CURL抓取页面、替换页面信息、调用WebService获取天气以及封装了CURL获取API接口的调用类,其中包含get、post、put、del、patch等基本API方法,希望通过本次学习,加强对CURL的理解和以后的实践应用。