首页 » 后端 » 正文

PHP的cURL使用 — 1

使用PHP的cURL库可以简单有效地抓取页面。

它的函数库是蛮大的:

curl_init 初始化一个curl会话,函数唯一的一个参数是可选的,表示一个url地址。

curl_copy_handle 拷贝一个curl连接资源的所有内容和参数

curl_errno 返回一个包含当前会话错误信息的数字编号

curl_error 返回一个包含当前会话错误信息的字符串

curl_strerror Return string descripbing the given error code

curl_escape 使用URL编码给定的字符串

curl_unescape  解码给定的URL编码的字符串

curl_file_create  Create a CURLFile object(创建文件对象)

curl_exec 执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。

curl_getinfo 获取一个curl连接资源句柄的信息

curl_close 关闭curl会话,唯一的参数是curl_init()函数返回的句柄。

curl_setopt_array 以数组形式为一个curl设置会话参数

curl_setopt 为一个curl设置会话参数

curl_version 获取curl相关的版本信息

curl_multi_init 解析一个curl批处理句柄

curl_multi_add_handle 向curl批处理会话中添加单独的curl句柄资源

curl_multi_exec 解析一个curl批处理句柄

curl_multi_getcontent 返回获取的输出文本流

curl_multi_info_read 获取当前解析的curl的相关传输信息

curl_multi_close 关闭一个批处理句柄资源

curl_multi_remove_handle 移除curl批处理句柄资源中的某一个句柄资源

curl_multi_select Get all the sockets associated with the cURL extension, which can then be “selected”(等待活跃链接进行选择执行)

curl_multi_perform  (不明)

curl_share_close  Close a cURL share handle

curl_share_init Initialize a cURL share handle

curl_share_seropt Set an option for a cURL share handle

curl_pause  Pause and unpause a connection

curl_reset  Reset all options of a libcurl session handle(重置curl句柄配置)

curl_version 获取cURL版本信息


基本例子


post数据


文件上传


cURL还提供了批量处理会话,下面是cURL批量处理相关函数:

  • curl_multi_init — 返回一个新cURL批处理句柄
  • curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄
  • curl_multi_exec — 解析一个cURL批处理句柄
  • curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
  • curl_multi_select — 等待所有cURL批处理中的活动连接
  • curl_multi_info_read — 获取当前解析的cURL的相关传输信息
  • curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
  • curl_multi_close — 关闭一组cURL句柄

  会造成CPU Loading过高,因为$active要等全部url数据接受完毕才变成false,所以这里用到了curl_multi_exec的返回值判断是否还有数据,当有数据的时候就不停调用curl_multi_exec,没有执行数据就会sleep,如此就会避免CPU Loading 100%了。

  这个示例中有两个主要循环。第一个 do-while 循环重复调用 curl_multi_exec() 。这个函数是无隔断(non-blocking)的,但会尽可能少地执行。它返回一个状态值,只要这个值等于常量 CURLM_CALL_MULTI_PERFORM ,就代表还有一些刻不容缓的工作要做(例如,把对应URL的http头信息发送出去)。也就是说,我们需要不断调用该函数,直到返回值发生改变。

  而接下来的 while 循环,只在 $active 变量为 true 时继续。这一变量之前作为第二个参数传给了 curl_multi_exec() ,代表只要批处理句柄中是否还有活动连接。接着,我们调用 curl_multi_select() ,在活动连接(例如接受服务器响应)出现之前,它都是被“屏蔽”的。这个函数成功执行后,我们又会进入另一个 do-while 循环,继续下一条URL。


查看第二篇 查看第三篇


参考:

  • http://www.phpddt.com/php/curl_multi.html

  • http://www.chinaz.com/program/2010/0119/104346.shtml

发表评论