使用cURL完成简单的请求主要分为以下四步:
1.初始化,创建一个新cURL资源
2.设置URL和相应的选项
3.抓取URL并把它传递给浏览器
4.关闭cURL资源,并且释放系统资源
首先,本来我们抓取一个网页,使用file_get_contents()函数来获取
$resourse = file_get_contents('http://www.baidu.com'); 或 $resourse = file('http://www.baidu.com'); 或 $resourse = readfile('http://www.baidu.com'); |
但是,这样我们会发现,没有办法有效地进行错误处理,更没办法进行高难度任务,如:文件上传、处理cookie、表单提交、验证等。
cURL 函数
curl_close — 关闭一个cURL会话
void curl_close ( resource ch)
curl_copy_handle — 复制一个cURL句柄和它的所有选项
resource curl_copy_handle ( resource
$ch
)curl_errno — 返回最后一次的错误号
int curl_errno ( resource ch)
如果没有错,则返回0
curl_error — 返回一个保护当前会话最近一次错误的字符串
string curl_error ( resource ch)
curl_escape — URL encodes the given string
string curl_escape ( resource
$ch
, string$str
)失败时返回false
curl_exec — 执行一个预先定义好的cURL会话
mixed curl_exec ( resource ch)
如果失败了,就返回false,注意使用 === false 来判断。如果没有错,则返回‘’。curl_file_create — Create a CURLFile object
curl_getinfo — 获取一个cURL连接资源句柄的信息
string curl_getinfo ( resource ch [, int opt])
opt参数有很多,是指定返回要查看的数据,CURLINFO_*curl_init — 初始化一个cURL会话
resource curl_init ( [string url])
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄
int curl_multi_add_handle ( resource
$mh
, resource$ch
)成功时返回0,失败时返回
CURLM_XXX
之一的错误码。curl_multi_close — 关闭一组cURL句柄
void curl_multi_close ( resource
$mh
)curl_multi_exec — 运行当前 cURL 句柄的子连接
int curl_multi_exec ( resource
$mh
, int&$still_running
)still_running
:一个用来判断操作是否仍在执行的标识的引用。curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的cURL的相关传输信息
curl_multi_init — 返回一个新cURL批处理句柄
resource curl_multi_init ( void )
失败返回false
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
int curl_multi_remove_handle ( resource
$mh
, resource$ch
)curl_multi_select — 等待所有cURL批处理中的活动连接
int curl_multi_select ( resource
$mh
[, float$timeout
= 1.0 ] )curl_multi_setopt — Set an option for the cURL multi handle
curl_multi_strerror — Return string describing error code
curl_pause — Pause and unpause a connection
int curl_pause ( resource
$ch
, int$bitmask
)curl_reset — Reset all options of a libcurl session handle
void curl_reset ( resource
$ch
)curl_setopt_array — 为cURL传输会话批量设置选项
curl_setopt — 设置一个cURL传输选项
bool curl_setopt ( resource ch, string option, mixed value)
这个函数是最重要的,一切玄妙均在此。
CURLOPT_AUTOREFERER | 当根据Location:重定向时,自动设置header中的Refer:信息 |
CURLOPT_COOKIESESSION | 启用时cURL会仅仅传递一个session cookie,忽略其他cookie,默认情况下从URL会将所有cookie返回给服务器。session cookie指用来判断服务器端的session是否有效而存在的cookie。 |
CURLOPT_FOLLOWLOCATION | 启用将服务器返回的“Location:”放在header中,递归地返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。 |
CURLOPT_HEADER | 启用时将头文件的信息作为数据流输出 |
CURLOPT_RETURNTRANSFER | 将curl_exc()获取的信息以文件流的形式返回,而不是直接输出。 |
CURLOPT_INFILESIZE | 设定上传文件的大小,单位是字节 |
CURLOPT_MAXCONNECTS | 允许的额最大连接数量,超过会通过CURLOPT_CLOSEPOLICY决定应该停止那些连接 |
CURLOPT_MAXREDIRS | 指定HTTP重定向的最多数量 |
CURLOPT_COOKIEFILE | 包含cookie数据的文件名,cookie的文件格式可以使netscape格式,或者只是纯HTTP头部信息存入文件 |
CURLOPT_COOKIEJAR | 连接结束后保存cookie信息的文件 |
CURLOPT_ENCODING | HTTP请求头中“Accept-Encoding”的值,支持的编码有identity,deflate和gzip。如果为空字符串,表示支持所有编码类型。 |
CURLOPT_POSTFILEDS | 全部数据使用HTTP协议中的post操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数通过urlencoded后的字符串类似于'paral=val1¶l2=val2'或使用一个以字段名为键值 |
CURLOPT_RANGE | 以“X-Y”的形式组成,其中X和Y都是可选项获取数据的范围,单位是字节,HTTP传输线程也支持几个这样的而重复项中间用逗号分隔如‘X-Y,N-M’ |
CURLOPT_REFERER | HTTP请求头的referer内容 |
CURLOPT_HTTPHEADER | 用来设置HTTP头字段的数组 |
CURLOPT_FILE | 设置输出文件的位置,值是一个资源类型,默认为STDOUT(浏览器) |
CURLOPT_INFILE | 在上传文件的时候需要读取的文件地址,值是一个资源类型 |
CURLOPT_HEADERFUNCTION | 设置一个回调函数,其有两个参数:cURL的资源句柄,输出的header数据。header数据的输出必须依赖这个函数,返回已经写入的数据大小。 |
CURLOPT_WRITEFUNCTION | 拥有两个参数的回调函数:会话句柄,HTTP响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息是整个字符串。设置返回值为精确的已写入字符串长度。发生错误时传输线程终止。 |
CURLOPT_COOKIE | 设定HTTP请求中的cookie,多个cookie用分号分隔,分号后带一个空格(例如,“fruit=apple; color=red”) |
curl_share_close — Close a cURL share handle
curl_share_init — Initialize a cURL share handle
curl_share_setopt — Set an option for a cURL share handle.
curl_strerror — Return string describing the given error code
curl_unescape — Decodes the given URL encoded string
curl_version — 获取cURL版本信息
string curl_version ( void )