http curl

<?php
namespace app;

use App\Library\Common;
use App\Library\Exception\ExceptionApp;
use App\Tools\unknown;

class HttpCurl
{

    public static function sendPost($url, $data, & $status = null, $timeout = 10, $header = [])
    {

        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        if ( !empty ($data)) {
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); // Post提交的数据包
        }
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
        $defaultHeader = ['Expect:'];
        //当传入header时合并处理,之前传入的header会被覆盖
        if ($header && is_array($header)) {
            $defaultHeader = array_merge($defaultHeader, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
        $result = curl_exec($curl); // 执行操作
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $errmsg = ',status:'.$status;
        if ($result === false) {
            $errmsg .= ',errmsg:'.curl_error($curl);
        }
        curl_close($curl); // 关闭CURL会话
        return $result;

    }

    public static function sendJsonPost($url, $data, & $status = null, $timeout = 10, $header = [])
    {
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        if ( !empty ($data)) {
            $strJsonData = json_encode($data);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $strJsonData); // Post提交的数据包
        }
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
        $defaultHeader = [
            'Expect:',
            'Content-Type: application/json',             // 设置内容类型为JSON
            'Content-Length: ' . strlen(json_encode($data))     // 设置内容长度
        ];
        //当传入header时合并处理,之前传入的header会被覆盖
        if ($header && is_array($header)) {
            $defaultHeader = array_merge($defaultHeader, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
        $result = curl_exec($curl); // 执行操作
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $errmsg = ',status:'.$status;
        if ($result === false) {
            $errmsg .= ',errmsg:'.curl_error($curl);
            Common::logNewError("", "http请求失败", new ExceptionApp($errmsg));
        }
        curl_close($curl); // 关闭CURL会话
        return $result;

    }

    public static function sendJsonPost256($url, $data, & $status = null, $timeout = 10, $header = [])
    {

        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        if ( !empty ($data)) {
            $strJsonData = json_encode($data, JSON_UNESCAPED_UNICODE);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $strJsonData); // Post提交的数据包
        }
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
        $defaultHeader = ['Expect:',
            'Content-Type: application/json',             // 设置内容类型为JSON
            'Content-Length: ' . strlen(json_encode($data))     // 设置内容长度
            ];
        //当传入header时合并处理,之前传入的header会被覆盖
        if ($header && is_array($header)) {
            $defaultHeader = array_merge($defaultHeader, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
        $result = curl_exec($curl); // 执行操作
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $errmsg = ',status:'.$status;
        if ($result === false) {
            $errmsg .= ',errmsg:'.curl_error($curl);
        }
        curl_close($curl); // 关闭CURL会话
        return $result;

    }
    
    /**
     * @param unknown $url 请求网址
     * @param string $params 请求参数
     * @param string $requestType 请求方式 POST、POST-JSON,默认POST
     * @return string|unknown
     */
    public static function sendPostV2($url, $params = false, $requestType = "POST", $headers = [])
    {
        $requestType = strtoupper($requestType);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);//不抓取头部信息。只返回数据
        curl_setopt($curl, CURLOPT_TIMEOUT,1000);//超时设置
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//1表示不返回bool值
        curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_POST, 1);
        if('POST' == $requestType){
            empty($headers) && $headers = array('Content-Type: application/x-www-form-urlencoded');
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);//重点
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
        }else if('POST-JSON' == $requestType){//post json格式数据
            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Cache-Control: no-cache',
                'Pragma: no-cache'
            ));//重点
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
        }
        Common::logInfo("", "http请求参数,method:".$requestType, ['url'=>$url,'data'=>$params,'headers'=>$headers]);
        $response = curl_exec($curl);
        $rst = (!empty($response) && !empty($responseArr = json_decode($response, true))) ? json_encode($responseArr, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) : $response;
        Common::logInfo("", "http响应结果:",  $rst);
        if (curl_errno($curl)) {
            return curl_error($curl);
        }
        curl_close($curl);
        $response = json_decode($response,true);
        return $response;
    }

    /**
     * 发送get请求
     * @param $url
     * @param $data
     * @param null $status
     * @param int $timeout
     * @param array $header
     * @return mixed
     */
    public static function sendGet($url, $data, & $status = null, $timeout = 10, $header = [])
    {
        if ( !empty ($data)) {
            (strpos($url, "?") !== false ) ? $url = $url . "&" .  http_build_query($data) : $url = $url .  "?" .  http_build_query($data);
        }
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
        $defaultHeader = ['Expect:','Content-Type:application/json'
            ];//'Content-Type:text/xml','Connection:Keep-Alive'
        //当传入header时合并处理,之前传入的header会被覆盖
        if ($header && is_array($header)) {
            $defaultHeader = array_merge($defaultHeader, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
        $result = curl_exec($curl); // 执行操作
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $errmsg = ',status:'.$status;
        if ($result === false) {
            $errmsg .= ',errmsg:'.curl_error($curl);
        }
        curl_close($curl); // 关闭CURL会话
        return $result;

    }

    public static function sendMsGet($url, $data, & $status = null, $timeout = 10000, $header = [])
    {
        if ( !empty ($data)) {
            (strpos($url, "?") !== false ) ? $url = $url . "&" .  http_build_query($data) : $url = $url .  "?" .  http_build_query($data);
        }
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_TIMEOUT_MS, $timeout); // 设置超时限制防止死循环
        $defaultHeader = ['Expect:'];
        //当传入header时合并处理,之前传入的header会被覆盖
        if ($header && is_array($header)) {
            $defaultHeader = array_merge($defaultHeader, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
        $result = curl_exec($curl); // 执行操作
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $errmsg = ',status:'.$status;
        if ($result === false) {
            $errmsg .= ',errmsg:'.curl_error($curl);
        }
        curl_close($curl); // 关闭CURL会话
        return $result;

    }

    public static function sendGetV2($url, $data, & $status = null, $timeout = 10, $header = [])
    {
        if ( !empty ($data)) {
            (strpos($url, "?") !== false ) ? $url = $url . "&" .  http_build_query($data) : $url = $url .  "?" .  http_build_query($data);
        }
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); // 设置超时限制防止死循环
        curl_setopt($curl,CURLOPT_HEADER,true);
        $defaultHeader = ['Expect:'];
        //当传入header时合并处理,之前传入的header会被覆盖
        if ($header && is_array($header)) {
            $defaultHeader = array_merge($defaultHeader, $header);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $defaultHeader); //设置HTTP头
        curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_NOBODY , true);

        $result = curl_exec($curl); // 执行操作

        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $errmsg = ',status:'.$status;

        if ($result === false) {
            $errmsg .= ',errmsg:'.curl_error($curl);
            Common::logNewError("", "http请求失败", new ExceptionApp($errmsg));
        }

        $res = [
            'header' => str_replace(["\n", "\t", "\r"], '', $result),
            'code' => $status
        ];
        curl_close($curl); // 关闭CURL会话
        return $res;

    }
}

  

posted on 2025-05-09 21:47  andydaopeng  阅读(14)  评论(0)    收藏  举报

导航