php之curl(Client URL Library)简介

介绍

由于最近应杰出那边的需求,要重新修改和宏业的API,所以不得不恶补一下curl的知识(以前只是大概了解了一下),现在和大家分享一下啦^-^。
我们先来认识下什么是cURL,可能还有很多同学没有听说过这个工具,我先来给大家简单介绍下什么是cURL:
官方文档是这样解释的,PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
听着是不是一堆高大上不太好理解的东西,其实简而言之:cURL可以使用URL的语法模拟浏览器来传输数据。

基本流程

使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤:

  • 初始化连接句柄;
  • 设置CURL选项;
  • 执行并获取结果;
  • 释放CURL连接句柄。

具体代码如下:

// 初始化连接句柄
 $ch = curl_init();
 //设置选项
 curl_setopt($ch,CURLOPT_URL,"http://www.imooc.com/");//设置请求的url
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_HEADER,0);
 // 3. 执行并获取HTML文档内容
 $output = curl_exec($ch);
 if($output === FALSE ){
    echo "CURL Error:".curl_error($ch);
 }else{
    echo $ch;
 }
 // 4. 释放curl句柄
 curl_close($ch);

这样的话相当于你请求了慕课网服务器的资源,运行一下结果就是把慕课网首页搞下来了。
怎么样,是不是很的简单也很好玩吧。

查看curl详细信息

当你想查看curl请求的详细信息的时候就可以在curl_exec()函数执行之后,可以使用curl_getinfo()函数获取CURL请求输出的相关信息。

$info = curl_getinfo($sh);
var_dump($info);

返回的是这样一个数组:

array
  'url' => string 'http://www.imooc.com/' (length=21)//网络地址。
  'content_type' => string 'text/html; charset=utf-8' (length=24)//内容编码。
  'http_code' => int 200//HTTP状态码。
  'header_size' => int 790//header的大小。
  'request_size' => int 52//请求的大小。
  'filetime' => int -1//文件创建的时间。
  'ssl_verify_result' => int 0//SSL验证结果。
  'redirect_count' => int 0//跳转计数。
  'total_time' => float 0.702//总耗时。
  'namelookup_time' => float 0//DNS查询耗时。
  'connect_time' => float 0.094//等待连接耗时。
  'pretransfer_time' => float 0.094//传输前准备耗时。
  'size_upload' => float 0//上传数据的大小。
  'size_download' => float 50443//下载数据的大小。
  'speed_download' => float 71856//下载速度。
  'speed_upload' => float 0//上传速度。
  'download_content_length' => float -1//下载内容的长度。
  'upload_content_length' => float 0//上传内容的长度。
  'starttransfer_time' => float 0.484//开始传输的时间表。
  'redirect_time' => float 0//重定向耗时。
  'certinfo' => 
    array
      empty
  'redirect_url' => string '' (length=0)//重定url。

是不是灰常详细啊。
### 使用CURL发送GET请求
下面才是我要讲的和这次杰出需求有关的东西,就是利用curl发送get,post请求。
利用CURL来发送GET请求其实很简单,大家都在html中都用过发送GET请求对吧,其实关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量用“=”赋值,各个GET名称和值由“&”分隔。
而且PHP为我们提供了一个函数专门用来拼装GET请求和数据http_build_query,这个函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。
结合这个函数,我写了一个发送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);
}

这样就非常简单明了啦。
### 使用CURL发送POST请求
利用curl发送post请求也非常简单,只要使用CURL提供的选CURLOPT_POSTFIELDS,设置该选项为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);//传入需要post的参数。
curl_setopt($con, CURLOPT_POST,true);//明确是post方法发送请求
curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);
return curl_exec($con);
}

### 总结
今天恶补的有关CURL的知识大概就这些啦,都很简单,等下次再深入学习!
这边附上一个curl_setopt方法的参数参考网站
下面是官网的解释

发布了36 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tyro_blog/article/details/51379120