6-12 420 views
1、cURL库
- 全称:Client URL,客户端URL,用于与各种的服务器使用各种类型的协议进行连接和通讯;
- 目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议;
同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证 - 需要安装libcurl库(可使用php_info函数判断是否有安装,一般都有的)
2、常用函数
- curl_init():初始化一个cURL会话;
- curl_setopt():设置属性,例如:curl_setopt($ch,CURLOPT_URL,‘www.example.com’),意思是设置请求的URL;
- curl_exec():执行一个cURL会话
- curl_close():关闭一个cURL会话
3、常用参数设置
- 设置头信息,例如
$header = ['Content-Type:appliction/json; charset=utf-8']; curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
- 设置POST数据,例如:
curl_setopt($curl, CURLOPT_POST, 1); $post_data = array( "username" => "coder", "password" => "12345" ); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
- 设置请求超时时间,例如:
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
- 设置响应超时时间,例如:
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
- 设置响应HEADER返回方式,例如:0:不输出头信息,1:输出头信息
curl_setopt($ch, CURLOPT_HEADER, 1);
- 设置返回响应结果,例如:0:直接输出,1:返回字符串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0)
- 设置ssl连接,有两种方式,一是直接关闭验证(不安全),二是指定本地证书文件,例如:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_CAINFO, "./static/cacert.pem"); 下载各个主要CA机构的公钥证书
4、封装常用get与post请求
- GET请求
/** * curl GET请求, api接口请求使用 * * @param string $url 请求URL * @param int $connect_time_out 请求超时时间,默认3,为0时不超时 * @param int $time_out 返回超时时间,默认10,为0时不超时 * @return mixed */ function api_curl_get($url, $connect_time_out = 3, $time_out = 10) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_time_out); curl_setopt($ch, CURLOPT_TIMEOUT, $time_out); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); $response = curl_exec($ch); if (curl_errno($ch)) { die(curl_error($ch)); } curl_close($ch); return $response; }
- POST请求
/** * curl POST请求, api接口请求使用 * * @param string $url 请求URL * @param string $postData 请求post数组 * @param int $connect_time_out 请求超时时间,默认3,为0时不超时 * @param int $time_out 返回超时时间,默认10,为0时不超时 * @return mixed */ function api_curl_post($url, $postData, $connect_time_out = 3, $time_out = 10) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_time_out); curl_setopt($ch, CURLOPT_TIMEOUT, $time_out); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); $response = curl_exec($ch); if (curl_errno($ch)) { die(curl_error($ch)); } curl_close($ch); return $response; }
参考文章
php中cURL会话的curl_setopt的CURLOPT_HEADER和CURLOPT_RETURNTRANSFER参数的使用