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扩展:

  1. 在php.ini里面开启curl这个扩展
  2. 将PHP的安装路径保存到环境变量的系统变量中(环境变量之间的分隔符是英文的分号)
  3. 重启apache服务器
  4. 重启计算机

实现curl的基本步骤:

  1. 初始化  curl_init();
  2. 设置相关变量  curl_setopt()
  3. 执行并获取结果  curl_exec()
  4. 释放对象  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;
}
慢慢来才是最快的
原文地址:https://www.cnblogs.com/jongty/p/11647826.html