php curl get post json xml請求提交

做做筆記,有錯誤,望大神指點,多多討論,多多留言!

<?php

namespace App\Lib;

class HttpRequest
{
    /**
     * GET請求
     * @param $url
     * @param array $data
     * @param bool $https
     * @param int $timeout
     * @return bool|string
     */
    public function httpGet($url,$data=array(),$https=true,$timeout=60) {
        if($url == "" || $timeout <= 0){
            return false;
        }
        if(is_array($data)) {
            $url = $url . '?' . http_build_query($data);
        }
        $curl = curl_init();
        if ($https) {
            //設置爲https請求,不驗證證書和hosts
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $response_data = curl_exec($curl);
        $status = curl_getinfo($curl);
        curl_close($curl);

        if(intval($status["http_code"])==200){
            return $response_data;
        }else{
            return  false;
        }
    }

    /**
     * POST請求
     * @param $url
     * @param array $data
     * @param bool $https
     * @param int $timeout
     * @return bool|string
     */
    public function httpPost($url,$data=array(),$https=true,$timeout=60) {
        if($url == "" || $timeout <= 0){
            return false;
        }
        if(!is_array($data)){
            echo "參數必須爲array";
        }

        $curl = curl_init();//初始化curl
        if ($https) {
            //設置爲https請求,不驗證證書和hosts
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
        curl_setopt($curl, CURLOPT_URL,$url);//抓取指定網頁
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果爲字符串且輸出到屏幕上
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($curl, CURLOPT_HEADER, 0);//設置header
        curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

        $response_data = curl_exec($curl);
        $status = curl_getinfo($curl);
        curl_close($curl);

        if(intval($status["http_code"])==200){
            return $response_data;
        }else{
            return  false;
        }
    }

    /**
     * POST JSON提交
     * @param $url
     * @param array $data
     * @param bool $json
     * @param bool $https
     * @param int $timeout
     * @return bool|string
     */
    public function httpPostJson($url, $data=array(), $json = false,$https=true,$timeout = 60){

        if($url == "" || $timeout <= 0){
            return false;
        }
        if(!is_array($data)){
            echo "參數必須爲array";
        }else{
            $data = json_encode( $data );
        }

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL,$url);//抓取指定網頁

        if ($https) {
            //設置爲https請求,不驗證證書和hosts
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
        curl_setopt($curl, CURLOPT_POST, 1);
//        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        if($json){
            // 發送JSON數據
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                    'Content-Type: application/json;charset=utf-8',
                    'Content-Length: ' . strlen($data))
            );
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($curl, CURLOPT_TIMEOUT, (int)$timeout);

        $response_data = curl_exec($curl);
        $status = curl_getinfo($curl);
        curl_close($curl);

        if(intval($status["http_code"])==200){
            return $response_data;
        }else{
            return  false;
        }
    }

    /**
     * POST XML 請求
     * @param $url
     * @param array $data
     * @param bool $https
     * @param int $timeout
     * @return bool|string
     */
    public function httpPostXml($url,$data=array(),$https=true,$timeout = 60)
    {
        if($url == "" || $timeout <= 0){
            return false;
        }
        // 將數組轉成字xml
        if(is_array($data)){
            $xml = $this->arrayToXml($data);
        }

        $curl = curl_init();
        if ($https) {                                                       //設置爲https請求,不驗證證書和hosts
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
        // 設置超時
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($curl, CURLOPT_URL, $url);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//嚴格校驗

        // 設置header
        curl_setopt($curl, CURLOPT_HEADER, false);
        // 要求結果爲字符串且輸出到屏幕上
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        // post提交方式
        curl_setopt($curl, CURLOPT_POST, true);
//        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
        // 運行curl
        $response_data = curl_exec($curl);
        $status = curl_getinfo($curl);
        curl_close($curl);

        if(intval($status["http_code"])==200){
            return $response_data;
        }else{
            return  false;
        }
    }

    /**
     * 數組轉xml字符
     * @param array $data
     * @return bool|string
     */
    public function arrayToXml($data=array()){
        if(!is_array($data) || count($data) <= 0){
            return false;
        }
        $xml = "<xml>";
        foreach ($data as $key=>$val){
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml;
    }

    /**
     * xml轉json字符串
     * @param $xml
     * @param bool $isFile
     * @return bool|false|string
     */
    public function xmlToString($xml,$isFile=false){
        //禁止引用外部xml實體
        libxml_disable_entity_loader(true);
        if($isFile){
            if(!file_exists($xml)) return false;
            $xmlStr = file_get_contents($xml);
        }else{
            $xmlStr = $xml;
        }
        $result= json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA));
        return $result;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章