PHP中的使用curl发送请求(GET请求和POST请求)

使用CURL发送请求的基本流程

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

1.初始化连接句柄;

2.设置CURL选项;

3.执行并获取结果;

4.释放VURL连接句柄。

下面的程序片段是使用CURL发送HTTP的典型过程

// 1. 初始化
 $ch = curl_init();
 // 2. 设置选项,包括URL
 curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");
 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);
 }
 // 4. 释放curl句柄
 curl_close($ch);

上述代码中使用到了四个函数

  • 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请求的输出信息

在curl_exec()函数执行之后,可以使用curl_getinfo()函数获取CURL请求输出的相关信息,示例代码如下:

curl_exec($ch);
$info = curl_getinfo($sh);
echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';

上述代码中curl_getinfo返回的是一个关联数组,包含以下数据:

  • 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:重定向耗时。

curl_getinfo()函数还有一个可选择参数$opt,通过这个参数可以设置一些常量,对应到上术这个字段,如果设置了第二个参数,那么返回的只有指定的信息。例如设置$opt为CURLINFO_TOTAL_TIME,则curl_getinfo()函数只返回total_time,即总传输消耗的时间,在只需要关注某些传输信息时,设置$opt参数很有意义。

使用CURL发送GET请求

如何使用CURL来发送GET请求,发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。使用这个函数,结合CURL发送HTTP请求的一般流程,我们封闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:

/**
 *@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);
}

这个函数把使用http_build_query 拼装好的带GET参数的URL传给curl_init函数,然后使用CURL发送HTTP请求。

使用CURL发送POST请求

可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:

/**
** @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);
}

上面代码中除了设置CURLOPT_POSTFIELDS外,我们还设置了CURL_POST为true,标识这个请求是一个POST请求。在POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • PHP扩展CURL的用法详解

    实现的功能: 1.实现远程获取和采集内容 2.实现PHP 网页版的FTP上传下载 3.实现模拟登陆:去一个邮件系统,curl可以模拟cookies 4.实现接口对接(API),数据传输等:通过一个平台发送短信啊,抓取和传递所传输的信息. 5.实现模拟Cookie等:登陆的状态下才可以操作一些属性. 如何使用CURL功能: 默认情况加PHP是不支持CURL的,需要在php.ini中开启该功能 ;extension=php_curl.dll前面的分号去掉 1  整个操作过程中第一步是用cur_ini

  • php curl 伪造IP来源的实例代码

    curl发出请求的文件fake_ip.php: 代码 复制代码 代码如下: <?php $ch = curl_init(); $url = "http://localhost/target_ip.php"; $header = array( 'CLIENT-IP:58.68.44.61', 'X-FORWARDED-FOR:58.68.44.61', ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_

  • php使用curl访问https示例分享

    为方便说明,先上代码吧 复制代码 代码如下: /**  * curl POST  *  * @param   string  url  * @param   array   数据  * @param   int     请求超时时间  * @param   bool    HTTPS时是否进行严格认证  * @return  string  */  function curlPost($url, $data = array(), $timeout = 30, $CA = true){ $cace

  • php之curl实现http与https请求的方法

    本文实例讲述了php之curl实现http与https请求的方法,分享给大家供大家参考.具体如下: 通常来说,php的curl函数组可以帮助我们把机器伪装成人的行为来抓取网站,下面来分享两个例子,一个是访问http网页,一个访问https网页,一起来看一下. 每次要使用curl的时候,总要查一堆资料. 现在将常用的几句保存下来,省的每次都去谷歌. 常规curl请求: 复制代码 代码如下: $url = 'http://www.jb51.net'; $curl = curl_init(); cur

  • php之curl设置超时实例

    本文实例讲述了php中curl超时设置方法.分享给大家供大家参考.具体实现方法如下: 访问HTTP方式很多,可以使用curl, socket, file_get_contents() 等方法. 在访问http时,需要考虑超时的问题. CURL访问HTTP: CURL 是常用的访问HTTP协议接口的lib库,性能高,还有一些并发支持的功能等.  curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括:    ① (重要) CURLOPT_TIMEOUT 设置cURL允许执行的

  • PHP中使用cURL实现Get和Post请求的方法

    1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如何运用它. 2.基本结构 在学习更为复杂的功能之前,先来看一下在PHP中建立cURL请求的基本步骤: (1)初始化 curl_init() (2)设置变量 curl_setopt() .最为重要,一切玄妙均在此.有一长串cURL参数可供设置,它们能指定URL请求的各个细节.要一次性

  • PHP下使用CURL方式POST数据至API接口的代码

    其实,也比较简单,上代码: 复制代码 代码如下: <?php $url = 'http://127.0.0.1/test.php';//POST指向的链接          $data = array(              'access_token'=>'thekeyvalue'         ); $json_data = postData($url, $data);          $array = json_decode($json_data,true);         

  • PHP curl 获取响应的状态码的方法

    PHP curl可以从服务器端模拟一个http请求,例如抓取网页.模拟登陆等.根据选项设置,可以在curl_exec的返回结果中获取到响应头和body,但这没有响应的状态吗.想要获取状态码,需要在执行curl_exec后再通过curl_getinfo来获取.例如: 复制代码 代码如下: $ch = curl_init (); curl_setopt($ch, CURLOPT_URL, 'http://www.google.com.hk'); curl_setopt($ch, CURLOPT_TI

  • PHP CURL获取返回值的方法

    在CURL中有一个参数 CURLOPT_RETURNTRANSFER : 复制代码 代码如下: curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 默认是 0 直接返回获取的输出的文本流,有时候,我们要拿返回值来做判断或者做其他用途的话那就不太好了. 幸好CURLOPT_RETURNTRANSFER  可以设置,如果设置成CURLOPT_RETURNTRANSFER 1: 复制代码 代码如下: curl_setopt($ch, CURLOPT_RETURNT

  • PHP CURL获取cookies模拟登录的方法

    要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookies,当你没有cookies的时候,直接返回 302 跳转,而且是连续几十个302跳转,根本抓不了数据.因此,在发送搜索命令时,需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了.这其实和论坛的模拟登录一个道理,先POST登录,获取cookies并

随机推荐