摘要:原理很簡單就是使用庫模擬工具類設(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
摘要:是開源的類庫,支持鏈?zhǔn)讲僮?,簡單易用。支持所有常見的等請求方式,支持上傳下載設(shè)置和讀取請求參數(shù)失敗重試限速代理證書等。版完美支持協(xié)程。現(xiàn)在同一個類實(shí)例,會自動管理。 YurunHttp 是開源的 PHP HTTP 類庫,支持鏈?zhǔn)讲僮?,簡單易用?支持所有常見的 GET、POST、PUT、DELETE、UPDATE 等請求方式,支持上傳下載、設(shè)置和讀取 header、Cookie、請求參...
摘要:我看可以發(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)然客戶端也要用小米...
摘要:簡介聚合數(shù)據(jù)全國車輛違章數(shù)據(jù)接口,目前已經(jīng)支持個左右的城市違章查詢,已連接上萬個。方便有車一族隨時了解自己是否有過交通違章,避免因遺忘或逾期處理違章罰單而造成的不必要損失。 簡介聚合數(shù)據(jù)全國車輛違章數(shù)據(jù)接口,目前已經(jīng)支持300個左右的城市違章查詢,已連接上萬個APP。方便有車一族隨時了解自己是否有過交通違章,避免因遺忘或逾期處理違章罰單而造成的不必要損失。 API參考文檔:https:...
摘要:的毫秒級超時也有問題。。中超時實(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) 為了保...
摘要:函數(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 請求,然后得到返回...
閱讀 487·2021-11-22 12:05
閱讀 1547·2021-11-17 09:33
閱讀 3594·2021-11-11 16:54
閱讀 2687·2021-10-14 09:49
閱讀 4069·2021-09-06 15:01
閱讀 1837·2019-08-29 17:23
閱讀 711·2019-08-29 14:09
閱讀 730·2019-08-29 12:28