PHP使用CURL详解
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
我们可以使用cURL通过我们的服务器去获取其他服务器的数据,比如气象局服务器的天气预报数据、比特币交易所的交易记录数据等。
在PHP中使用cURL,需要开启curl扩展:
- 在php.ini里面开启curl这个扩展
- 将PHP的安装路径保存到环境变量的系统变量中(环境变量之间的分隔符是英文的分号)
- 重启apache服务器
- 重启计算机
实现curl的基本步骤:
- 初始化 curl_init();
- 设置相关变量 curl_setopt()
- 执行并获取结果 curl_exec()
- 释放对象 curl_close()
封装的cURL方法一:
//curl采集器 public function http_curl($url,$type='get',$res='json',$arr=''){ //1.初始化curl $ch=curl_init(); //2.设置curl的参数 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); if($type=='post'){ curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$arr); } //3.采集 $output=curl_exec($ch); //4.关闭 curl_close($ch); //如果返回的值,是json格式,则转换成数组 if($res=='json'){ if(curl_errno($ch)){ //请求失败,返回错误信息 return curl_error($ch); }else{ //请求成功 return json_decode($output,true); } } }//http_curl end
封装的cURL方法二:
function getContent($url, $method, $body='') { $ch = curl_init(); //post提交方式 if ($method == 'POST') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); } else { $url .= '?' . $body; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "x-sdk-client" => "php/2.0.0", )); if ( substr($url, 0, 5) == 'https' ) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); } $rtn = curl_exec($ch); if ($rtn === false) { // 大多由设置等原因引起,一般无法保障后续逻辑正常执行, // 所以这里触发的是E_USER_ERROR,会终止脚本执行,无法被try...catch捕获,需要用户排查环境、网络等故障 trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR); } curl_close($ch); return $rtn; }
慢慢来才是最快的