简介

PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。

需求

为了使用 PHP 的 cURL 函数,需要安装 » libcurl 包。
PHP 需要使用 libcurl7.0.2-beta 或者更高版本。在 PHP4.2.3 里使用cURL,你需要安装 7.9.0 或更高版本的 libcurl。从 PHP4.3.0 开始你需要安装 7.9.0 或更高版本的 libcurl。从 PHP5.0.0开始你需要安装 7.10.5 或更高版本的 libcurl。

安装

要 PHP 支持 cURL,必须在编译 PHP 时加上 —with-curl[=DIR] 选项,DIR 为包含 lib 和 include 的目录路径。在 include 目录中必须有一个名为curl,包含了easy.h 和curl.h 的文件夹。lib文件夹里应该有一个名为libcurl.a的文件。对于 PHP 4.3.0 你可以配置 —with-curlwrappers 使 cURL 使用 URL 流。

相关函数

函数 描述
curl_close() 关闭一个cURL会话。
curl_copy_handle() 复制一个cURL句柄和它的所有选项。
curl_errno() 返回最后一次的错误号。
curl_error() 返回一个保护当前会话最近一次错误的字符串。
curl_escape() 返回转义字符串,对给定的字符串进行URL编码。
curl_exec() 执行一个cURL会话。
curl_file_create() 创建一个 CURLFile 对象。
curl_getinfo() 获取一个cURL连接资源句柄的信息。
curl_init() 初始化一个cURL会话。
curl_multi_add_handle() 向curl批处理会话中添加单独的curl句柄。
curl_multi_close() 关闭一组cURL句柄。
curl_multi_exec() 运行当前 cURL 句柄的子连接。
curl_multi_getcontent() 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。
curl_multi_info_read() 获取当前解析的cURL的相关传输信息。
curl_multi_init() 返回一个新cURL批处理句柄。
curl_multi_remove_handle() 移除curl批处理句柄资源中的某个句柄资源。
curl_multi_select() 等待所有cURL批处理中的活动连接。
curl_multi_setopt() 设置一个批处理cURL传输选项。
curl_multi_strerror() 返回描述错误码的字符串文本。
curl_pause() 暂停及恢复连接。
curl_reset() 重置libcurl的会话句柄的所有选项。
curl_setopt_array() 为cURL传输会话批量设置选项。
curl_setopt() 设置一个cURL传输选项。
curl_share_close() 关闭cURL共享句柄。
curl_share_init() 初始化cURL共享句柄。
curl_share_setopt() 设置一个共享句柄的cURL传输选项。
curl_strerror() 返回错误代码的字符串描述。
curl_unescape() 解码URL编码后的字符串。
curl_version() 获取cURL版本信息。

示例

  1. /**
  2. * curl get
  3. * @param string $url
  4. * @param array $header example:['Content-Type:application/x-www-form-urlencoded', 'access-token:'123'];
  5. * @return array
  6. */
  7. public function curl_get($url, $header = [])
  8. {
  9. $curl = curl_init();
  10. curl_setopt($curl, CURLOPT_URL, $url);
  11. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  12. if($header) curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  13. $res = curl_exec($curl);
  14. curl_close($curl);
  15. return $res;
  16. }
  17. /**
  18. * curl post
  19. * @param string $url
  20. * @param array $params example:['sku' => $sku]; 支持xml;
  21. * @param array $header example:['Content-Type:application/x-www-form-urlencoded', 'access-token:'123'];
  22. * @param int $second 设置超时时间 单位:秒
  23. * @return array
  24. */
  25. public function curl_post($url, $params = '', $header = [], $second = 30)
  26. {
  27. $curl = curl_init();
  28. curl_setopt($curl, CURLOPT_URL, $url);
  29. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  30. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  31. curl_setopt($curl, CURLOPT_POST, 1);
  32. if ($params) {
  33. if (is_array($params)) {
  34. $str = "";
  35. foreach ($params as $key => $value) {
  36. $str .= $key.'='.urlencode($value)."&";
  37. }
  38. $str = substr($str, 0, -1);
  39. curl_setopt($curl, CURLOPT_POSTFIELDS, $str);
  40. } else {
  41. curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
  42. }
  43. }
  44. if ($header) curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  45. $res = curl_exec($curl);
  46. curl_close($curl);
  47. return $res;
  48. }