资讯专栏INFORMATION COLUMN

php用curl封装一个http请求类(链式调用)

李文鹏 / 1506人阅读

摘要:原理很简单就是使用库模拟工具类设置设置超时不能小于等于只需要设置一个秒的数量就可以设置代理设置代理端口设置来源页面设置用户代理模拟用户使用的浏览器响应中是否显示,表示显示设置请求的参数或设置证书路径模拟请求设置参数

原理很简单,就是使用curl库

ch = curl_init();
    }

    /**
     * 设置http header
     * @param $header
     * @return $this
     */
    public function setHeader($header) {
        if(is_array($header)){
            curl_setopt($this->ch, CURLOPT_HTTPHEADER  , $header);
        }
        return $this;
    }

    /**
     * 设置http 超时
     * @param int $time
     * @return $this
     */
    public function setTimeout($time) {
        // 不能小于等于0
        if($time <= 0) {
            $time = 5;
        }
        //只需要设置一个秒的数量就可以
        curl_setopt($this->ch, CURLOPT_TIMEOUT, $time);
        return $this;
    }


    /**
     * 设置http 代理
     * @param string $proxy
     * @return $this
     */
    public function setProxy($proxy) {
        if($proxy){
            curl_setopt ($this->ch, CURLOPT_PROXY, $proxy);
        }
        return $this;
    }

    /**
     * 设置http 代理端口
     * @param int $port
     * @return $this
     */
    public function setProxyPort($port) {
        if(is_int($port)) {
            curl_setopt($this->ch, CURLOPT_PROXYPORT, $port);
        }
        return $this;
    }

    /**
     * 设置来源页面
     * @param string $referer
     * @return $this
     */
    public function setReferer($referer = ""){
        if (!empty($referer))
            curl_setopt($this->ch, CURLOPT_REFERER , $referer);
        return $this;
    }

    /**
     * 设置用户代理
     * @param string $agent
     * @return $this
     */
    public function setUserAgent($agent = "") {
        if ($agent) {
            // 模拟用户使用的浏览器
            curl_setopt($this->ch, CURLOPT_USERAGENT, $agent);
        }
        return $this;
    }

    /**
     * http响应中是否显示header,1表示显示
     * @param $show
     * @return $this
     */
    public function showResponseHeader($show) {
        curl_setopt($this->ch, CURLOPT_HEADER, $show);
        return $this;
    }


    /**
     * 设置http请求的参数,get或post
     * @param array $params
     * @return $this
     */
    public function setParams($params) {
        $this->httpParams = $params;
        return $this;
    }

    /**
     * 设置证书路径
     * @param $file
     */
    public function setCainfo($file) {
        curl_setopt($this->ch, CURLOPT_CAINFO, $file);
    }


    /**
     * 模拟GET请求
     * @param string $url
     * @param string $dataType
     * @return bool|mixed
     */
    public function get($url, $dataType = "text") {
        if(stripos($url, "https://") !== FALSE) {
            curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($this->ch, CURLOPT_SSLVERSION, 1);
        }
        // 设置get参数
        if(!empty($this->httpParams) && is_array($this->httpParams)) {
            if(strpos($url, "?") !== false) {
                $url .= http_build_query($this->httpParams);
            } else {
                $url .= "?" . http_build_query($this->httpParams);
            }
        }
        // end 设置get参数
        curl_setopt($this->ch, CURLOPT_URL, $url);
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1 );
        $content = curl_exec($this->ch);
        $status = curl_getinfo($this->ch);
        curl_close($this->ch);
        if (isset($status["http_code"]) && $status["http_code"] == 200) {
            if ($dataType == "json") {
                $content = json_decode($content, true);
            }
            return $content;
        } else {
            return FALSE;
        }
    }




    /**
     * 模拟POST请求
     *
     * @param string $url
     * @param array $fields
     * @param string $dataType
     * @return mixed
     * 
     * HttpCurl::post("http://api.example.com/?a=123", array("abc"=>"123", "efg"=>"567"), "json");
     * HttpCurl::post("http://api.example.com/", "这是post原始内容", "json");
     * 文件post上传
     * HttpCurl::post("http://api.example.com/", array("abc"=>"123", "file1"=>"@/data/1.jpg"), "json");
     */
    public function post($url, $dataType="text") {
        if(stripos($url, "https://") !== FALSE) {
            curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($this->ch, CURLOPT_SSLVERSION, 1);
        }
        curl_setopt($this->ch, CURLOPT_URL, $url);
        // 设置post body
        if(!empty($this->httpParams)) {
            if(is_array($this->httpParams)) {
                curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($this->httpParams));
            } else if(is_string($this->httpParams)) {
                curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->httpParams);
            }
        }
        // end 设置post body
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt($this->ch, CURLOPT_POST, true);
        $content = curl_exec($this->ch);
        $status = curl_getinfo($this->ch);
        curl_close($this->ch);
        if (isset($status["http_code"]) && $status["http_code"] == 200) {
            if ($dataType == "json") {
                $content = json_decode($content, true);
            }
            return $content;
        } else {
            return FALSE;
        }
    }
}
使用举例

echo (new HttpCurl())->setParams(["name" => "dfh", "age" => 12])->get("http://www.test.com");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23185.html

相关文章

  • YurunHttp v3.1.0,新增 Cookie 管理机制,单元测试支持

    摘要:是开源的类库,支持链式操作,简单易用。支持所有常见的等请求方式,支持上传下载设置和读取请求参数失败重试限速代理证书等。版完美支持协程。现在同一个类实例,会自动管理。 YurunHttp 是开源的 PHP HTTP 类库,支持链式操作,简单易用。 支持所有常见的 GET、POST、PUT、DELETE、UPDATE 等请求方式,支持上传下载、设置和读取 header、Cookie、请求参...

    cnTomato 评论0 收藏0
  • 从小米推送 php 服务端框架中看看代码该怎么写

    摘要:我看可以发现小米推送目录结构是这样的其中是底层的网络库,主要是封装了的和方法请求远程的服务器并利用提供的类来接收服务器返回的数据,代码十分优雅,我们可以看看。 小米推送框架 近期因为有需要稍微看了一下小米推送的 php 版本服务端框架,这个推送平台免费的,我们只需要告诉小米平台我们要推什么设备,它会自己帮我们推,而且还会统计很多信息给我们分析,如抵达率和点击率等等,当然客户端也要用小米...

    loonggg 评论0 收藏0
  • 全国车辆违章查询数据使PHP

    摘要:简介聚合数据全国车辆违章数据接口,目前已经支持个左右的城市违章查询,已连接上万个。方便有车一族随时了解自己是否有过交通违章,避免因遗忘或逾期处理违章罚单而造成的不必要损失。 简介聚合数据全国车辆违章数据接口,目前已经支持300个左右的城市违章查询,已连接上万个APP。方便有车一族随时了解自己是否有过交通违章,避免因遗忘或逾期处理违章罚单而造成的不必要损失。 API参考文档:https:...

    zhangqh 评论0 收藏0
  • PHP超时处理全面总结

    摘要:的毫秒级超时也有问题。。中超时实现一初级最简单的超时实现秒级超时思路很简单链接一个后端,然后设置为非阻塞模式,如果没有连接上就一直循环,判断当前时间和超时时间之间的差异。实际处理这个调用的部件在完成后,通过状态通知和回调来通知调用者。 概述 在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 为了保...

    I_Am 评论0 收藏0
  • PHP cURL 函数封装

    摘要:函数代码支持,烟火里的尘埃请求地址参数数据如果服务器返回则返回,不然则返回初始化设置传输选项方式获取采集结果关闭链接解析判断还是验证解析 概念描述 CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,可以使用cURL实现Get和Post请求的方法。 应用场景 在开发中服务端调用API 时,经常用到向第三方API发起GET 或 POST 请求,然后得到返回...

    darcrand 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<