简介
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版本信息。 |
示例
/**
* curl get
* @param string $url
* @param array $header example:['Content-Type:application/x-www-form-urlencoded', 'access-token:'123'];
* @return array
*/
public function curl_get($url, $header = [])
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if($header) curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
/**
* curl post
* @param string $url
* @param array $params example:['sku' => $sku]; 支持xml;
* @param array $header example:['Content-Type:application/x-www-form-urlencoded', 'access-token:'123'];
* @param int $second 设置超时时间 单位:秒
* @return array
*/
public function curl_post($url, $params = '', $header = [], $second = 30)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
if ($params) {
if (is_array($params)) {
$str = "";
foreach ($params as $key => $value) {
$str .= $key.'='.urlencode($value)."&";
}
$str = substr($str, 0, -1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $str);
} else {
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
}
}
if ($header) curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}