开发者社区> 小雨雨hi> 正文

【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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
VMware顺容器之势而为,发布开源项目Lightwave和Photon
本文讲的是VMware顺容器之势而为,发布开源项目Lightwave和Photon,【编者的话】VMware是老牌的虚拟化技术提供商,但Docker等容器技术对其核心业务造成了不小的冲击,为了应付这种冲击,并顺应潮流,VMware发布了两个新的开源项目,Project Lightwave和Project Photon,这两个项目都是致力于提高云应用以及企业架构的扩展性。
1189 0
C语言项目开发-项目架构和编程命名规范
一个项目的流程: 1、公司市场人员与客户交流,了解客户、引导客户使用公司最优资源并产出一份市场需求文档 2、公司需求人员(BA)与客户交流,了解客户需求并产出一个软件需求文档 3、项目经理、开发小组成员、需求人员(BA)一起开一个需求评审会议,对不合理的地方,    打回给BA,再由BA与客户沟通 4、程序员接到和充分了解软件需求文档后产生软件设计文档(包括概要设计文档和详细设计文档,    涉及到数据库的还需要进行数据库的设计) 5、程序员根据设计文档进行编码、调试、打包发布。
1256 0
【CURL】PHP的CURL开发项目最佳实践
前言 最近自己做了团队内部的http调试工具,github开源地址 https://github.com/diandianxiyu/ApiTesting ,通过这个项目又重新操作了PHP的curl函数,通过本篇博客进行记录,和大家一起学习~ Code 本代码通过PHP7环境运行。
696 0
nginx怎么部署php项目,如何php项目部署到nginx
php项目部署到nginx的方法:首先安装“Nginx”和“php-fpm”;然后将项目复制到“nginx/html”文件下;接着修改配置文件;最后重新载入Nginx并启动“php-fpm”即可。
38 0
项目开发总结报告
1.1编写目的 鲜花识别的开发工作已经基本完成,在分析开发过程中的经验和教训的基础上,我们完成了项目开发总结报告。通过总结与分析,为我们以后的项目开发积累了丰富的经验,从而减少成本。 1.2背景 说明: 项目的名称:鲜花识别系统 任务提出者:项目组老师 开发者:物联网开发小组 安装需求:电脑Win10或win7的系统、Android studio、默认浏览器和MySQL数据库、树莓派Linux系统
257 0
《PHP高性能开发:基础、框架与项目实战》_王甲临
《PHP高性能开发:基础、框架与项目实战》_王甲临
545 0
这可能是大型复杂项目下数据流的最佳实践
实际项目中沉淀的数据流最佳实践。
1477 0
Spring项目开发过程的几个坑
最近在做一个项目,在使用SSM的过程中有些知识点值得记录,这几个知识点相对来说比较有价值,我想不少人可能会遇到这几个问题。 1、数据库建表的时候,表的字段不能为数据库的关键字.
901 0
+关注
小雨雨hi
CSDN学院讲师、博客专家,专注服务端开发,服务端架构演变,区块链技术研究,项目管理,热衷学习前沿技术,以及日常的技术分享,曾经历过创业技术合伙人角色。
277
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载