curl 封装类 php,基于ThinkPHP5的cURL封装类

现在一个项目,需要频繁调用API从数据层获取数据,数据层业务层分离。封装了一个基于此的cURL封装类:

/**

* cURL封装类

*

* @author guo

* @date 2016-12-17

*/

namespace app\home\Request;

class cURL {

private static $url = ''; // 访问的url

private static $oriUrl = ''; // Referer url,告诉服务器来源页面

private static $data = array(); // 可能发出的请求参数 get和post都有数组传参方式

private static $method; // 访问方式,默认是GET请求

private static $cookie = ''; // 是否传递cookie; 默认为空, 需要时传入cookie参数

private static $returnCookie = 0; // 是否返回cookie; 默认0不返回

/*

* 发送请求入口

* **/

public static function send($url, $data = array(), $method = 'get', $cookie = '', $returnCookie = 0)

{

//判断传入的url

if (!$url){

return self::output('100', 'url不能为空!', '');

}

self::$url = $url;

self::$data = $data;

self::$method = $method;

self::$oriUrl = request()->url(true);//助手函数request获取当前url

self::$cookie = $cookie;

self::$returnCookie = $returnCookie;

// 请求方式判断

if ( !in_array(self::$method, array('get', 'post') )) {

return self::output('101', '非法请求方式!', '');

}

return self::doRequest(self::$method);

}

/**

* 基础发起curl请求函数

* @param string $method 请求方式, get或者post

*/

private static function doRequest($method)

{

$curl = curl_init(); //初始化curl

/* get方式 */

if ($method != 1) {

self::$data = empty(self::$data) ? '' : self::dealGetData(self::$data);//处理get数据

self::$url = self::$url.self::$data;

}

curl_setopt($curl, CURLOPT_URL, self::$url); //抓取指定网页

curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl, CURLOPT_AUTOREFERER, 1);

curl_setopt($curl, CURLOPT_REFERER, self::$oriUrl); //来源,获取的当前站点url

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

/* post方式数据传递 */

if ($method == 1)

{

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(self::$data));

}

/* 如果提交了cookie参数, 传递cookie参数 */

if(self::$cookie) {

curl_setopt($curl, CURLOPT_COOKIE, self::$cookie);

}

curl_setopt($curl, CURLOPT_HEADER, self::$returnCookie); //是否返回cookie

curl_setopt($curl, CURLOPT_TIMEOUT, 30); //超时设置

/* 执行并获取数据 */

$result = curl_exec($curl);

/* 出错时的操作 */

$error_num = curl_error($curl); // 获取错误码,正常时为0

//出错时

if ($error_num >0){

$error = include 'cURLError.php'; //载入错误信息

$error_msg = $error[$error_num]; //获取对应错误信息

return self::output($error_num, $error_msg, '');

} else {

$error_num = '0';

$error_msg = "请求正常!";

curl_close($curl); //关闭

/* 如果返回cookie */

if(self::$returnCookie){

list($header, $body) = explode("\r\n\r\n", $result, 2);

preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);

$info['cookie'] = substr($matches[1][0], 1);

$info['content'] = $body;

return self::output($error_num, $error_msg, $info);

} else {

return self::output($error_num, $error_msg, $result);

}

}

}

/*

* 处理get数据

* @param array $data 传入的需要处理的数据

* @return string 包含参数与值的字符串

* **/

public static function dealGetData($data)

{

$output = '?';

foreach ($data as $k => $v){

$output .= $k.'='.$v.'&';

}

$output = substr($output, 0 , -1);

return $output;

}

/*

* 返回数据

* @param int $code 状态码,为0时是ok的没有出错正常请求

* @param string $info 返回的错误信息

* @param array $result 返回的数据

* @return array

* **/

public static function output($code, $info, $result)

{

return array(

'code' => $code,

'info' => $info,

'result' => $result

);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: "composer require curl/curl" 是使用Composer工具安装Curl/Curl库的命令。Curl/Curl是一个用于处理HTTP请求的PHP库。它可以通过发送GET和POST请求来与远程服务器进行通信,并处理返回的响应数据。例如,你可以使用Curl/Curl库发送GET请求并附带参数,也可以发送POST请求并将参数包含在请求体中。你可以使用该库处理请求头信息、设置身份验证、设置Cookie等。通过Curl/Curl库,你可以方便地与远程服务器进行数据交互。 引用: 关于SSL证书校验,Curl/Curl库提供了两个选项来控制校验行为,即 CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST。当你关闭这两个选项,即设置为false时,Curl/Curl库将不再验证SSL证书。这在本地测试时可能更加方便,但在生产环境中不建议关闭SSL证书校验,因为这可能会存在安全风险。你应该确保在生产环境中使用有效的SSL证书,并启用SSL证书校验来确保通信的安全性。 综上所述,thinkphp curl/curl库是一个用于处理HTTP请求的PHP库,它可以方便地与远程服务器进行数据交互,发送GET和POST请求,并处理响应数据。在使用该库时,你可以使用Composer工具进行安装,并可以选择是否启用SSL证书校验来确保通信的安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [thinkphp5.0中使用curl调用接口数据](https://blog.csdn.net/skx19980524/article/details/123685184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [thinkPHP 使用curl实现远端数据调取](https://blog.csdn.net/huaweichenai/article/details/100523595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值