PHP libcurl使用总结

PHP libcurl使用总结


curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用非常广泛。php也通过由 Daniel Stenberg开发的libcurl扩展库对curl提供支持。libcurl支持的协议很多,比如:http,https,ftp,gopher,telnet,dict,file,ldap。并且提供了相关的很多强大功能,在php4.0.2后,引入了很多功能函数。通过这篇文章libcurl进行一个总结。

一、安装与配置
在使用libcurl前你需要安装libcurl包,需要libcurl7.0.2 beta以上版本。

php4.2.3 需要 libcurl 7.9.0以上; php 4.3.0 需要 libcurl 7.9.8以上 ; php5.0 以上 需要libcurl 7.10.5 以上。

为了使用libcurl,你必须在编译php时就打开了–with-curl=DIR配置,其中DIR是包含lib和include的路径,在includ中有一个名为curl的文件夹包含eash.h 和curl.h文件。在lib文件夹中有一个名为libcurl.a 的库文件。

二、资源类型
扩展定义了两种资源类型: 一个是cURL句柄 ,一个是cURL multi 句柄。

三、预定义常量
libcurl扩展定义了很多常量,只有在PHP已经编译此扩展的前提下才能使用,他们将在 curl_setopt()curl_multi_setopt() curl_getinfo() 中使用。

四、简单原理
一单编译php支持libcurl扩展后,就可以使用cURL函数了。其工作大致分为四步:

  1. 使用curl_init()函数初始化一个cURL session。
  2. 通过curl_setopt()设置你的请求。
  3. 通过curl_exex()函数执行session。
  4. curl_close删除session。

简单示例代码如下:

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?> 

五、cURL 函数

  1. curl_init ([ string $url = NULL ] )
    初始化一个session并返回一个cURL 句柄以方便下面的函数使用。

    参数:url 如果不设置,可以在 curl_setopt() 中通过常量CURLOPT_URL 设置。

  2. curl_setopt ( resource ch,int option , mixed $value )
    设置cURL

    ch为 curl_init()返回的句柄 , option为预设置的常量,value,为常量的值

    • CURLOPT_BUFFERSIZE 每个读取的缓冲区大小
    • CURLOPT_URL 需要连接的url
    • CURLOPT_HEADER 在输出中是否包含头
    • CURLOPT_POST POST?
    • CURLOPT_POSTFIELDS post的数据,如果发送的是文件,必须以@开头并且是绝对路径,这个数据可以被定义为类似para1=val1¶2=val2&…的数据也可以是一个数组。如果是个数组,那么你发送的头会被定义为multipart/form-data.
    • CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_1_0 (forces HTTP/1.0), or CURL_HTTP_VERSION_1_1 (forces HTTP/1.1).
    • CURLOPT_ENCODING 设置头部 Accept-Encoding内容 支持”identity”, “deflate”, “gzip”.如果设置为“”所以都支持。
    • CURLOPT_RETURNTRANSFER 将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    • CURLOPT_FOLLOWLOCATION 启用时会将服务器服务器返回的”Location: “放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
    • CURLOPT_COOKIE 设定HTTP请求中”Cookie: “部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, “fruit=apple; colour=red”)。
    • CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。
    • CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array(‘Content-type: text/plain’, ‘Content-length: 100’)
    • CURLOPT_CUSTOMREQUEST 使用一个自定义的请求信息来代替”GET”或”HEAD”作为HTTP请求。这对于执行”DELETE” 或者其他更隐蔽的HTTP请求。有效值如”GET”,”POST”,”CONNECT”等等。也就是说,不要在这里输入整个HTTP请求。例如输入”GET /index.html HTTP/1.0\r\n\r\n”是不正确的。
    • CURLOPT_USERPWD 传递一个连接中需要的用户名和密码,格式为:”[username]:[password]”。
    • -
  3. 封装基本代码组件
 class CurlLib
{
   static public function http($url, $userpass = "", $postdata = false, $timeout = false, $cookies = "")
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        if( !empty($cookies) )
            curl_setopt($ch, CURLOPT_COOKIE, $cookies);
        if( $timeout !== false && is_numeric($timeout))
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        if( !empty($userpass))
            curl_setopt($ch, CURLOPT_USERPWD, $userpass);
        if($postdata !==false)
        {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
        }
        $response = curl_exec($ch);

        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($code == 200)
            return $response;
        else
        {
            return array('code'=>$code, 'response'=>$response);
        }
    }
}

你可能感兴趣的:(php)