一、CURL小結 個人將歸納curl請求總結成三步 1、創建curl 句柄(curl_init),並設置參數(curl_setopt)(打開冰箱) 2、執行請求(curl_exec),處理返回的數據 (把大象塞進去) 3、關閉curl(curl_close),釋放所有資源(關上冰箱) 其實如果代碼看 ...
一、CURL小結
個人將歸納curl請求總結成三步
1、創建curl 句柄(curl_init),並設置參數(curl_setopt)(打開冰箱)
2、執行請求(curl_exec),處理返回的數據 (把大象塞進去)
3、關閉curl(curl_close),釋放所有資源(關上冰箱)
其實如果代碼看起來比較複雜,複雜的地方可能就是在處理返回數據的邏輯。
二、CURL_SETOPT
故名思議,SetOption 設置參數,其中囊括的參數較多,這裡只是簡單提取常用的幾個,如需查看更多參數,點擊這裡,常見的設置UA、Cookie、https等
bool curl_setopt ( resource $ch , int $option , mixed $value ) CURLOPT_USERAGENT 在HTTP請求中包含一個"User-Agent: "頭的字元串。 CURLOPT_REFERER 在HTTP請求頭中"Referer: "的內容。 CURLOPT_TIMEOUT 允許 cURL 函數執行的最長秒數。 CURLOPT_RETURNTRANSFER TRUE 將curl_exec()獲取的信息以字元串返回,而不是直接輸出。
/*下麵兩個再https請求中才需設置*/ CURLOPT_SSL_VERIFYPEER FALSE 禁止 cURL 驗證對等證書(peer's certificate)。要驗證的交換證書可以在 CURLOPT_CAINFO 選項中設置,或在 CURLOPT_CAPATH中設置證書目錄。(自cURL 7.10開始預設為 TRUE。從 cURL 7.10開始預設綁定安裝。) CURLOPT_SSL_VERIFYHOST 設置為 1 是檢查伺服器SSL證書中是否存在一個公用名(common name)。譯者註:公用名(Common Name)一般來講就是填寫你將要申請SSL證書的功能變數名稱 (domain)或子功能變數名稱(sub domain)。 設置成 2,會檢查公用名是否存在,並且是否與提供的主機名匹配。 0 為不檢查名稱。 在生產環境中,這個值應該是 2(預設值)。 值 1 的支持在 cURL 7.28.1 中被刪除了。
下麵以請求百度為例,需要使用自行設置URL、Ua、Cookie等,https請求中才需要只用的SSL證書校驗,http請求中可不用,如果需要請求有規律的地址,類似example.com/?id=$i,修改for迴圈即可。
<?php class getRequest { const sUA = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)'; const sURL = 'https://www.baidu.com'; const sCookie = 'fake if you want'; function vInitRequest() { $curl = curl_init(); curl_setopt($curl, CURLOPT_HEADER, self::sUA); curl_setopt($curl, CURLOPT_COOKIE, self::sCookie); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); /* * ssl check,use for https url */ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // for ($iId = 1; $iId < 1000; $iId++) { // $sURL = self::sURL.$iId; curl_setopt($curl, CURLOPT_URL, self::sURL); $this->sExecRequest($curl); // } } function sExecRequest($curl) { $sRet = curl_exec($curl); print_r($sRet); /** * handle your response * stripos or preg */ curl_close($curl); } } $foo = new getRequest(); $foo->vInitRequest(); ?>
未完