php curl官网说明: http://php.net/manual/zh/book.curl.php
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 4.0.2中被引入。
使用cURL函数的基本思想是先使用curl_init()
初始化一个cURL会话,接着你可以通过curl_setopt()
设置你需要的全部选项,然后使用curl_exec()
来执行会话,
当执行完会话后使用curl_close()
关闭会话。
php curl函数集
函数 | 描述 |
---|---|
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 | Return string describing error code |
curl_pause | Pause and unpause a connection |
curl_reset | Reset all options of a libcurl session handle |
curl_setopt_array | 为cURL传输会话批量设置选项 |
curl_setopt | 设置一个cURL传输选项 |
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 | 解码给定的 URL 编码的字符串 |
curl_version | 获取cURL版本信息 |
例1 使用PHP的cURL模块获取baidu.com的主页
<?php
// 创建一个新cURL资源
$ch = curl_init();
$fp = fopen("example_homepage.txt", "w");
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");
curl_setopt($ch, CURLOPT_FILE, $fp); //这个文件将是你放置传送的输出文件,默认是标准输出stdout
curl_setopt($ch, CURLOPT_HEADER, 0); //如果你想把一个头包含在输出中,设置这个选项为一个非零值
// 开始执行
curl_exec($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
//关闭文件
fclose($fp);
?>
例2 上传文件
<?php
/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
?>
Note:
传递一个数组array到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data
,然而传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded
。
curl_setopt 常用选项
选项 | 描述 |
---|---|
CURLOPT_URL | 需要获取的URL地址,也可以在curl_init()函数中设置。 |
CURLOPT_USERAGENT | 在HTTP请求中包含一个"User-Agent: "头的字符串。 |
CURLOPT_USERPWD | 传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。 |
CURLOPT_CAINFO | 一个保存着1个或多个用来让服务端验证的证书的文件名。这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义。 . |
CURLOPT_CAPATH | 一个保存着多个CA证书的目录。这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的。 |
CURLOPT_COOKIE | 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。 |
CURLOPT_COOKIEFILE | 包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。 |
CURLOPT_COOKIEJAR | 连接结束后保存cookie信息的文件。 |
CURLOPT_HTTPHEADER | 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100') |
CURLOPT_RETURNTRANSFER | 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。 |
CURLOPT_SSL_VERIFYPEER | 禁用后 cURL将终止从服务端进行验证。使用 CURLOPT_CAINFO 选项设置证书,使用 CURLOPT_CAPATH 选项设置证书目录,如果 CURLOPT_SSL_VERIFYPEER (默认值为2)被启用, CURLOPT_SSL_VERIFYHOST 需要被设置成TRUE,否则设置为FALSE。 |
CURLOPT_SSL_VERIFYHOST | 数值1:检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。数值2:检查公用名是否存在,并且是否与提供的主机名匹配。 |
例3 https请求
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.jb51.net");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https请求 不验证osts
$data = curl_exec($ch);
curl_close($ch);
var_dump($data);
?>
例4 支持get post http https请求,只返回内容,不输出头信息
<?php
function get_post($url, $params=array()) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一个头包含在输出中,设置这个选项为一个非零值
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https请求 不验证osts
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "https://api.weixin.qq.com/sns/auth";
$data = get_post($url);
var_dump($data);
?>