成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php用curl封裝一個http請求類(鏈?zhǔn)秸{(diào)用)

李文鵬 / 1555人閱讀

摘要:原理很簡單就是使用庫模擬工具類設(shè)置設(shè)置超時不能小于等于只需要設(shè)置一個秒的數(shù)量就可以設(shè)置代理設(shè)置代理端口設(shè)置來源頁面設(shè)置用戶代理模擬用戶使用的瀏覽器響應(yīng)中是否顯示,表示顯示設(shè)置請求的參數(shù)或設(shè)置證書路徑模擬請求設(shè)置參數(shù)

原理很簡單,就是使用curl庫

ch = curl_init();
    }

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

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


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

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

    /**
     * 設(shè)置來源頁面
     * @param string $referer
     * @return $this
     */
    public function setReferer($referer = ""){
        if (!empty($referer))
            curl_setopt($this->ch, CURLOPT_REFERER , $referer);
        return $this;
    }

    /**
     * 設(shè)置用戶代理
     * @param string $agent
     * @return $this
     */
    public function setUserAgent($agent = "") {
        if ($agent) {
            // 模擬用戶使用的瀏覽器
            curl_setopt($this->ch, CURLOPT_USERAGENT, $agent);
        }
        return $this;
    }

    /**
     * http響應(yīng)中是否顯示header,1表示顯示
     * @param $show
     * @return $this
     */
    public function showResponseHeader($show) {
        curl_setopt($this->ch, CURLOPT_HEADER, $show);
        return $this;
    }


    /**
     * 設(shè)置http請求的參數(shù),get或post
     * @param array $params
     * @return $this
     */
    public function setParams($params) {
        $this->httpParams = $params;
        return $this;
    }

    /**
     * 設(shè)置證書路徑
     * @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);
        }
        // 設(shè)置get參數(shù)
        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 設(shè)置get參數(shù)
        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原始內(nèi)容", "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);
        // 設(shè)置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 設(shè)置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");

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23185.html

相關(guān)文章

  • YurunHttp v3.1.0,新增 Cookie 管理機(jī)制,單元測試支持

    摘要:是開源的類庫,支持鏈?zhǔn)讲僮?,簡單易用。支持所有常見的等請求方式,支持上傳下載設(shè)置和讀取請求參數(shù)失敗重試限速代理證書等。版完美支持協(xié)程。現(xiàn)在同一個類實(shí)例,會自動管理。 YurunHttp 是開源的 PHP HTTP 類庫,支持鏈?zhǔn)讲僮?,簡單易用?支持所有常見的 GET、POST、PUT、DELETE、UPDATE 等請求方式,支持上傳下載、設(shè)置和讀取 header、Cookie、請求參...

    cnTomato 評論0 收藏0
  • 從小米推送 php 服務(wù)端框架中看看代碼該怎么寫

    摘要:我看可以發(fā)現(xiàn)小米推送目錄結(jié)構(gòu)是這樣的其中是底層的網(wǎng)絡(luò)庫,主要是封裝了的和方法請求遠(yuǎn)程的服務(wù)器并利用提供的類來接收服務(wù)器返回的數(shù)據(jù),代碼十分優(yōu)雅,我們可以看看。 小米推送框架 近期因?yàn)橛行枰晕⒖戳艘幌滦∶淄扑偷?php 版本服務(wù)端框架,這個推送平臺免費(fèi)的,我們只需要告訴小米平臺我們要推什么設(shè)備,它會自己幫我們推,而且還會統(tǒng)計(jì)很多信息給我們分析,如抵達(dá)率和點(diǎn)擊率等等,當(dāng)然客戶端也要用小米...

    loonggg 評論0 收藏0
  • 全國車輛違章查詢數(shù)據(jù)使PHP

    摘要:簡介聚合數(shù)據(jù)全國車輛違章數(shù)據(jù)接口,目前已經(jīng)支持個左右的城市違章查詢,已連接上萬個。方便有車一族隨時了解自己是否有過交通違章,避免因遺忘或逾期處理違章罰單而造成的不必要損失。 簡介聚合數(shù)據(jù)全國車輛違章數(shù)據(jù)接口,目前已經(jīng)支持300個左右的城市違章查詢,已連接上萬個APP。方便有車一族隨時了解自己是否有過交通違章,避免因遺忘或逾期處理違章罰單而造成的不必要損失。 API參考文檔:https:...

    zhangqh 評論0 收藏0
  • PHP超時處理全面總結(jié)

    摘要:的毫秒級超時也有問題。。中超時實(shí)現(xiàn)一初級最簡單的超時實(shí)現(xiàn)秒級超時思路很簡單鏈接一個后端,然后設(shè)置為非阻塞模式,如果沒有連接上就一直循環(huán),判斷當(dāng)前時間和超時時間之間的差異。實(shí)際處理這個調(diào)用的部件在完成后,通過狀態(tài)通知和回調(diào)來通知調(diào)用者。 概述 在PHP開發(fā)中工作里非常多使用到超時處理到超時的場合,我說幾個場景: 異步獲取數(shù)據(jù)如果某個后端數(shù)據(jù)源獲取不成功則跳過,不影響整個頁面展現(xiàn) 為了保...

    I_Am 評論0 收藏0
  • PHP cURL 函數(shù)封裝

    摘要:函數(shù)代碼支持,煙火里的塵埃請求地址參數(shù)數(shù)據(jù)如果服務(wù)器返回則返回,不然則返回初始化設(shè)置傳輸選項(xiàng)方式獲取采集結(jié)果關(guān)閉鏈接解析判斷還是驗(yàn)證解析 概念描述 CURL是一個非常強(qiáng)大的開源庫,支持很多協(xié)議,包括HTTP、FTP、TELNET等,可以使用cURL實(shí)現(xiàn)Get和Post請求的方法。 應(yīng)用場景 在開發(fā)中服務(wù)端調(diào)用API 時,經(jīng)常用到向第三方API發(fā)起GET 或 POST 請求,然后得到返回...

    darcrand 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<