用PHP封装一个强大且通用的cURL方法

这篇具有很好参考价值的文章主要介绍了用PHP封装一个强大且通用的cURL方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用PHP封装一个强大且通用的cURL方法。
用PHP封装一个强大且通用的cURL方法。
用PHP封装一个强大且通用的cURL方法。
用PHP封装一个强大且通用的cURL方法。文章来源地址https://www.toymoban.com/news/detail-634901.html

/**
 * @function 强大且通用的cURL请求库
 * @param    $url            string        路径       如:https://example.com/a/b?key=val&k=>v
 * @param    $method         string        请求方式   如:get、post、put、delete、patch、options
 * @param    $payload        array|string  荷载       如:['foo' => 'bar', 'upload_file' => new CURLFile(file_path)]或json{"foo":"bar"}
 * @param    $request_header array         请求头     如:['Content-Type' => 'json', 'Set-Cookie' => 'foo']
 * @param    $time_out       int           超时秒数   如:10,(单位:秒)
 * @return   array [bool 请求是否成功, string 错误内容, [int http状态码, array 响应头, string 响应主体内容]];
 */
function curl($url, $method = 'GET', $payload = [], $request_header = [], $time_out = 10) {
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL, $url);

    $method = strtoupper($method);
    if ($method == 'POST') {
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
    } else if ($method == 'PUT') {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
    } else if ($method == 'DELETE') {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
    } else if ($method == 'PATCH') {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
    } else if ($method == 'OPTIONS') {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'OPTIONS');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
    } else if($method == 'HEAD') {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
    } else {
        curl_setopt($curl, CURLOPT_HTTPGET, true);
    }

    if ((parse_url($url)['scheme'] ?? '') == 'https') {
        //防止对12306类似的使用自家的ssl证书,造成的请求失败
        //禁止验证对等证书
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        //禁止验证主机证书
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    }

    if ($time_out) {
        curl_setopt($curl, CURLOPT_TIMEOUT, $time_out);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $time_out);
    }

    if ($request_header) {
        //追加请求头 配置curl内容
        curl_setopt($curl, CURLOPT_HTTPHEADER, array_map(function ($key, $value) {return $key . ': ' . $value;}, array_keys($request_header), $request_header));
    }

    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    curl_setopt($curl, CURLOPT_VERBOSE, true);
    $response    = curl_exec($curl);
    $curl_info   = curl_getinfo($curl);
    $body        = substr($response, $curl_info['header_size']);
    $header_str  = trim(substr($response, 0, $curl_info['header_size']));
    $header = [];
    if($header_str) {
        $header_arr  = explode("\r\n", $header_str);
        foreach($header_arr as $every_header) {
            $header_temp = explode(': ', $every_header, 2);
            if(count($header_temp) == 2) {
                $header[$header_temp[0]] = $header_temp[1];
            }
        }
    }
    curl_close($curl);

    if (curl_errno($curl)) {
        return ['status' => false, 'msg'  => curl_error($curl), 'data' => ['http_code' => $curl_info['http_code'], 'body' => '', 'header' => [], 'info' => $curl_info]];
    }
    return ['status' => true, 'msg'  => '', 'data' => ['http_code' => $curl_info['http_code'], 'body' => $body, 'header' => $header, 'info' => $curl_info]];
}

到了这里,关于用PHP封装一个强大且通用的cURL方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java多线程查表(封装方法 多表通用)

    经过多线程的学习和实践 总结了两种多线程查表方法  两种方法都经过我的封装 某表使用时 server层加上方法sql即可 查询流程: 1 count全表条数 2 通过总条数 将全表数据分为10份 3 开辟10个线程查询limit语句(线程数可自定义) 以下方法均以mysql数据库测试 其他库同理 目录 一 线

    2024年02月12日
    浏览(44)
  • PHP用CURL发送Content-type为application/json的POST请求方法

    HELLO 各位伙伴,最近一直在做项目,没有及时更新。望请见谅。 今天,给大家讲一下php请求第三方接口的时候遇到的问题,大家都知道,在请求第三方接口的时候,会要求我们用post还是get来传参 一般我们传参的时候基本上都是form-data。有一些第三方为了安全或者是编码格式

    2024年02月10日
    浏览(56)
  • PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口

    如何保证API接口安全 接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: Token授权机制 :用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务

    2024年02月09日
    浏览(59)
  • 自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

    一、构建方法 确定工具库的需求和功能:在开始构建工具库之前,你需要明确你的工具库需要包含哪些方法及工具,以及这些工具或方法应该具备哪些功能。这有助于你更好地规划你的开发工作。 编写工具代码:使用你熟悉的前端框架(如React、Vue等)编写工具代码。确保你

    2024年04月14日
    浏览(45)
  • 一个通用的es聚合查询方法

    调整方法如下: getSearchCondition为数据库中配置的条件: {\\\"query\\\":{\\\"bool\\\":{\\\"must\\\":[{\\\"exists\\\":{\\\"field\\\":\\\"db_type\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_ip\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_port\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_db_name\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_db_table\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_asset_name\\\",\\\"boost\\\":1}

    2024年02月08日
    浏览(39)
  • 一个通用的EXCEL生成下载方法

    Excel是一个Java开发中必须会用到的东西,之前博主也发过一篇关于使用Excel的文章,但是最近工作中,发现了一个更好的使用方法,所以,就对之前的博客进行总结,然后就有了这篇新的,万能通用的方法说明书了 好了,闲话不多说,直接上干货了 控制器代码如下 上面总结

    2024年02月10日
    浏览(37)
  • x-cmd pkg | curl - 极其强大的网络请求处理工具

    curl(Client for URLs)是一款网络请求工具。 curl 于 1996 年首次发布。它最初被命名为 httpget 后更名为curl。 curl 常用于发送网络请求,它支持多种网络协议。例如:HTTP、HTTPS、FTP等。 使用 x curl 即可自动下载并使用 在终端运行 eval \\\"$(wget -O- https://get.x-cmd.com)\\\" 即可完成 x 命令安装

    2024年01月22日
    浏览(52)
  • 使用js编写一个函数判断所有数据类型的通用方法

    一、判断数据类型的方法 1、typeof 在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。 对于数组、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。 要想区别对象、数组单

    2024年02月22日
    浏览(50)
  • PHP curl Bad Request

    通过浏览器或postman访问服务器url,正常返回 通过curl访问url,返回Bad Request 上网搜索,可能出现的原因:url中包含空格、参数未使用urlencode转化 经过尝试,还是不生效。 再次排查,发现没有设置header时,返回正常。 之前表头: 进一步尝试,改为: 去掉换行,运行正常。 原

    2024年02月09日
    浏览(53)
  • php curl apache 超时 500错误

    web请求超过40s 就返回500错误 php的超时时间 set_time_limit无效 curl CURLOPT_TIMEOUT 设置请求时间 无效 设置apache Timeout 链接超时 无效 最后添加 Fcgid才可以 apache 配置文件 httpd.conf

    2024年02月11日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包