curl请求类

         curl请求类实现,具体实现如下:

class HttpRequest{
    private $hostUrl = "http://www.xxx.com";
    private $headers;

    protected function __construct(){
        $this->headers = array('content-type: application/x-www-form-urlencoded;charset=UTF-8;');
    }

    /**
     * 发起http请求
     * @param $postData 请求数据
     * @return mixed
     * @throws HttpException
     * @throws \HttpException
     */
    public function curl($postData){
        $curlPostData = $this->getCurlPostData($postData);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->hostUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPostData);

        $response = curl_exec($ch);

        /*网络通讯失败*/
        if (curl_errno($ch)) {
            throw new HttpException(false, curl_error($ch));
        } else{
            $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if (200 !== $httpStatusCode) {
                throw new HttpException($response, $httpStatusCode);
            }
        }

        curl_close($ch);

        return $response;
    }

    /**
     * 转换数据格式
     * @param $postData 请求数据数组
     * @return string
     */
    private function getCurlPostData($postData){
        $contentType    =  $this->headers[0];
        $returnData     = "";

        if(strripos($contentType, "application/json") !== false){
            $returnData = json_encode($postData);
        } else if(strripos($contentType, "application/x-www-form-urlencoded") !== false){
            foreach ($postData as $key => $value){
                $returnData .= "$key=" . urlencode($value) . "&";
            }

            return $returnData;
        }

        return $returnData;
    }
   
    protected function alipayCurl($url, $postFields = null) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $postBodyString = "";
    $encodeArray = Array();
    $postMultipart = false;

     if (is_array($postFields) && 0 < count($postFields)) {
        foreach ($postFields as $k => $v) {
            if ("@" != substr($v, 0, 1)) //判断是不是文件上传{
                $postBodyString .= "$k=" . urlencode($this->characet($v, $this->postCharset)) . "&";
                $encodeArray[$k] = $this->characet($v, $this->postCharset);
            } else //文件上传用multipart/form-data,否则用www-form-urlencoded{
                $postMultipart = true;
                $encodeArray[$k] = new \CURLFile(substr($v, 1));
            }
        }
        unset ($k, $v);
        curl_setopt($ch, CURLOPT_POST, true);
        if ($postMultipart) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, $encodeArray);
        } else {
            curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString, 0, -1));
        }
     }

     if ($postMultipart) {
        $headers = array('content-type: multipart/form-data;charset=' . $this->postCharset . ';boundary=' . $this->getMillisecond());
     } else {
        $headers = array('content-type: application/x-www-form-urlencoded;charset=' . $this->postCharset);
    }
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $reponse = curl_exec($ch);

    if (curl_errno($ch)) {
        throw new Exception(curl_error($ch), 0);
    } else {
        $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if (200 !== $httpStatusCode) {
            throw new Exception($reponse, $httpStatusCode);
        }
    }

    curl_close($ch);
    return $reponse;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值