【CURL】PHP的CURL开发项目最佳实践

简介: 前言最近自己做了团队内部的http调试工具,github开源地址 https://github.com/diandianxiyu/ApiTesting ,通过这个项目又重新操作了PHP的curl函数,通过本篇博客进行记录,和大家一起学习~Code本代码通过PHP7环境运行。

前言

最近自己做了团队内部的http调试工具,github开源地址 https://github.com/diandianxiyu/ApiTesting ,通过这个项目又重新操作了PHP的curl函数,通过本篇博客进行记录,和大家一起学习~

Code

本代码通过PHP7环境运行。


function curl($url, $method='GET',$fields = [], $headers=[],$auth = false){
        //如果是get的获取方式,拼接参数到url上
        if($method == "GET"){
            $fields_string = http_build_query($fields);
            $url=$url."?".$fields_string;
        }
        $curl = curl_init($url); //初始化
        curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, $method ); //设定HTTP请求方式
        curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_VERBOSE, 1);
        curl_setopt($curl, CURLOPT_HEADER, 1);
        $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
        $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
        $header[] = "Cache-Control: max-age=0";
        $header[] = "Connection: keep-alive";
        $header[] = "Keep-Alive: 300";
        $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
        $header[] = "Accept-Language: en-us,en;q=0.5";
        $header[] = "Pragma: "; // browsers keep this blank.
        curl_setopt($curl, CURLOPT_HTTPHEADER, array_merge($header,$headers)); //和参数中的header一起传递过去
        if($auth){
            curl_setopt($curl, CURLOPT_USERPWD, "$auth");
            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        }
        if($fields){
            //POST
            if($method == "POST"){//单独对POST方法设置参数传递
                $fields_string = http_build_query($fields);
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
            }else{
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
                curl_setopt($curl, CURLOPT_BINARYTRANSFER, true) ;
            }
        }
        $response = curl_exec($curl); //执行curl
        $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
        $header_string = substr($response, 0, $header_size);
        $body = substr($response, $header_size);
        $header_rows = explode(PHP_EOL, $header_string);
        foreach($header_rows as $key => $value){
            $header_rows[$key]=trim($header_rows[$key]);
        }
        $i=0;
        foreach((array)$header_rows as $hr){
            $colonpos = strpos($hr, ':');
            $key = $colonpos !== false ? substr($hr, 0, $colonpos) : (int)$i++;
            $headers[$key] = $colonpos !== false ? trim(substr($hr, $colonpos+1)) : $hr;
        }
        $j=0;
        foreach((array)$headers as $key => $val){
            $vals = explode(';', $val);
            if(count($vals) >= 2){
                unset($headers[$key]);
                foreach($vals as $vk => $vv){
                    $equalpos = strpos($vv, '=');
                    $vkey = $equalpos !== false ? trim(substr($vv, 0, $equalpos)) : (int)$j++;
                    $headers[$key][$vkey] = $equalpos !== false ? trim(substr($vv, $equalpos+1)) : $vv;
                }
            }
        }
        curl_close($curl);
        return array($body, $headers); //最终返回 result[0]为body,result[1]为header
    }

参考资料

http://www.php.net/curl

目录
相关文章
|
10月前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
272 87
|
10月前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
316 88
|
10月前
|
安全 编译器 PHP
PHP 8 新特性:现代开发的强力引擎
PHP 8 新特性:现代开发的强力引擎
277 89
|
10月前
|
安全 编译器 PHP
PHP 8 新特性:现代化开发的飞跃
PHP 8 新特性:现代化开发的飞跃
397 89
|
10月前
|
安全 大数据 PHP
PHP 7+ 新特性实战指南:提升开发效率
PHP 7+ 新特性实战指南:提升开发效率
265 87
|
8月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
8月前
|
Web App开发 安全 PHP
刚上线的PHP项目被攻击了怎么办
近期因忙于多个项目,代码质量有所疏忽,导致项目上线后遭攻击。攻击者通过文件上传漏洞和测试登录方式入侵,修改了 index.php 并植入恶意文件。经排查,问题源于未限制上传文件类型及未关闭测试登录配置。修复措施包括锁定文件、限制上传后缀、关闭测试登录、删除高危用户并限制其访问。此次事件提醒我们,细节疏漏可能引发严重风险,需时刻保持警惕。
|
10月前
|
JavaScript Linux PHP
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
272 3
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
|
8月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
707 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡