基本語法:php
function curl($url){
$ch=curl_init(); //初始化
curl_setopt($ch, CURLOPT_URL, $url); //核心json
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否直接顯示
$str=curl_exec($ch); //執行
curl_close($ch); //關閉
return $str; //返回
}服務器
一:簡單的curl採集cookie
1. 初始化多線程
$ch = curl_init(); //curl
2. 設置選項,包括URL ide
curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");函數
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);網站
curl_setopt($ch,CURLOPT_HEADER,0); //編碼
3. 執行並獲取HTML文檔內容
$output = curl_exec($ch);
if($output === FALSE ){ echo "CURL Error:".curl_error($ch); }
4. 釋放curl句柄
curl_close($ch);
5.輸出
echo $output;
二:須要Referer的採集
對於一些程序,它可能判斷來源網址,若是發現referer不是本身的網站,則拒絕訪問,這時候,咱們就須要添加CURLOPT_REFERER參數,模擬來路,使得程序可以正常採集。
對於模擬登陸的應用,單單提交參數和模擬來路並不能解決問題,這時候咱們就須要保存或者提交相應的Cookie參數,這個在PHP cURL裏面也提供了相應的參數:
CURLOPT_COOKIE: 直接使用字符串方式提交cookie參數
CURLOPT_COOKIEFILE: 使用文件方式提交cookie參數
CURLOPT_COOKIEJAR: 保存提交後反饋的cookie數據
四:壓縮網頁採集(gzip)
不管使用iconv仍是強大的mb_convert_encoding都沒法還原數據;
CURLOPT_ENCODING參數配置壓縮
手冊說明:支持的編碼有"identity","deflate"和"gzip"。若是爲空字符串"",請求頭會發送全部支持的編碼類型。
後面一句代表,使用curl_setopt($ch, CURLOPT_ENCODING, "");
也是能夠的,可是不能不加這個參數。
有些請求連接是https類型的,這時候使用cURL採集可能會失敗,這時候,咱們可使用 var_dump(curl_error($ch));
的方法打印錯誤提示,而後根據錯誤提示查找相應的解決方案。好比SSL錯誤常見提示:SSL certificate problem: unable to get local issuer certificate
,這時候,咱們就須要利用參數:CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST 來禁用SSL證書的驗證,我嘗試過只使用CURLOPT_SSL_VERIFYPEER參數禁用失敗,因此你們最好同時使用兩個參數。
六:代理採集
你們都知道,國內存在萬惡的牆,因此,假如咱們須要獲取某些被牆數據時,就須要用到國外代理服務器;又或者咱們須要採集大量數據時,須要不斷切換IP,也會用到代理。
使用代理在PHP cURL裏面有幾個相對應的參數:CURLOPT_PROXY、CURLOPT_PROXYPORT 和 CURLOPT_PROXYUSERPWD,還有另外幾個,這裏不列舉。
CURLOPT_PROXY 指定代理IP參數
CURLOPT_PROXYPORT 指定代理端口參數
CURLOPT_PROXYUSERPWD 指定須要驗證的代理的帳號密碼,"[username]:[password]"格式的字符串
關於代理帳號獲取,你們本身發揮,我這裏提供網上搜索到的一個列表:高匿代理
封裝函數:
function curl($url, $data=""){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //SSL 報錯時使用 //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1) ; curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0") ; curl_setopt($ch, CURLOPT_REFERER, $url) ; // curl_setopt($ch, CURLOPT_ENCODING, "gzip"); //傳遞cookie if($data["cookie"]) { curl_setopt($ch, CURLOPT_COOKIE, $data["cookie"]) ; } $response = curl_exec($ch); $header = curl_getinfo($ch); if (curl_errno($ch)) { print curl_error($ch); } curl_close($ch); return $response;}