PHP libcurl使用总结
2015-07-22 21:16
537 查看
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函数了。其工作大致分为四步:
使用curl_init()函数初始化一个cURL session。
通过curl_setopt()设置你的请求。
通过curl_exex()函数执行session。
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 函数
curl_init ([ string $url = NULL ] )
初始化一个session并返回一个cURL 句柄以方便下面的函数使用。
参数:url 如果不设置,可以在 curl_setopt() 中通过常量CURLOPT_URL 设置。
curl_setopt ( resource ch,intoption , 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]”。
-
封装基本代码组件
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下目前为目最全的CURL中文说明
- PHP curl_setopt()函数实例代码与参数分析
- php采用curl访问域名返回405 method not allowed提示的解决方法
- php中file_get_content 和curl以及fopen 效率分析
- php中curl和file_get_content的区别
- PHP使用CURL实现多线程抓取网页
- 利用curl 多线程 模拟 并发的详解
- 在PHP中使用curl_init函数的说明
- 使用php方法curl抓取AJAX异步内容思路分析及代码分享
- 利用curl抓取远程页面内容的示例代码
- 开启CURL扩展,让服务器支持PHP curl函数(远程采集)
- 使用curl递归下载软件脚本分享
- PHP 获取远程网页内容的代码(fopen,curl已测)
- PHP中让curl支持sock5的代码实例
- php curl常见错误:SSL错误、bool(false)
- curl不使用文件存取cookie php使用curl获取cookie示例
- php curl模拟post请求小实例
- php下使用curl模拟用户登陆的代码
- php使用curl发送json格式数据实例
- php使用curl检测网页是否被百度收录的示例分享