PHP的HTTP客戶端:Leaps/HttpClient

jopen 9年前發布 | 18K 次閱讀 Leaps PHP開發

Leaps/HttpClient 是一個PHP語言寫的“多線程"Http客戶端,支持HTTP/HTTPS抓取數據,默認使用Curl多線程獲取數據,在不支持Curl的情況下自動使用 socket在發起請求,支持代理服務器,支持基本的http認證。采集好幫手啊!

HttpClient 通過HTTP/HTTPS協議獲取數據

===========
安裝
===========
"require" : {
    "php" : ">=5.4.0"
    "leaps/httpclient": "1.2.3",
}


$HttpClient = new \Leaps\HttpClient\HttpClient();
-----------
獲取一個實例化對像


    echo (new \Leaps\HttpClient\HttpClient())->get('http://www.baidu.com/');




setAgent($agent = null)
---------
設置客戶端信息,留空則使用系統默認,返回HttpClient自身


echo (new \Leaps\HttpClient\HttpClient())->setAgent('test')->get('http://www.baidu.com/');


setCookies($cookie)
---------
設置cookie內容,$cookie為字符串,多個cookie請用;隔開


(new \Leaps\HttpClient\HttpClient())->setCookies('a=1;b=a;c[0]=1;c[1]=2');
    
setProxy($host,$port)
---------
設置代理服務器地址
(new \Leaps\HttpClient\HttpClient())->setProxy('username','password');


setAuthorization($username,$password)
---------
設置基本認證的用戶名和密碼
(new \Leaps\HttpClient\HttpClient())->setAuthorization('username','password');
    
setReferer($referer)
---------
設置引用頁


(new \Leaps\HttpClient\HttpClient())->setReferer('http://www.test.com/');


setIp($ip)
---------
設置請求的服務器的IP,這樣可避免請求域名時DNS解析


// 這樣設置請求頁面并不會通過DNS解析獲取百度服務器的數據,而是直接請求127.0.0.1(即本機)的服務器的數據
(new \Leaps\HttpClient\HttpClient())->setIp('127.0.0.1')->get('http://www.baidu.com/test.html');


setMultiMaxNum($num)
---------
設置并發請求時最大列隊數量,系統默認為100。
HttpClient 是支持并發請求的,詳細可查看下面的get()方法。如果同時請求一個服務器,在一瞬間會對被請求服務器造成巨大壓力,也會對本服務器增加網絡IO壓力,所以這個參數可以控制同時并發的數量上限,當達到上限后,列隊將等待執行完畢一個追加一個插入列隊。




setOption($key, $value)
---------
設置其它參數用以彌補HttpClient類中不存在的方法,具體請看具體驅動的方法,比如采用CURL的話,其實就相當于CURL的setOption()方法


(new \Leaps\HttpClient\HttpClient())->setOption(CURLOPT_TIMEOUT,30);


get($url, $timeout = 10)
---------
用GET方法請求一個(或多個)頁面,這樣可以大大縮短API請求時間,并可以設置超時時間,單位:秒
支持并發進程請求,并發請求的特點:比如需要同時請求100個頁面,傳統的是一個一個載入,假設每個頁面需要0.1秒,那么100個頁面就需要耗時10秒,而通過并發的方式,100個頁面理論上也就是0.1秒就可以同時載入完成了,效率非常高。


單個URL直接返回請求的內容的對象,多個URL則返回以URL為key的數組


// 請求單個頁面
echo (new \Leaps\HttpClient\HttpClient())->get('http://www.baidu.com/',3)->data();

// 請求多個頁面
$urls = array
(
'http://www.baidu.com/',
'http://www.google.com/',
'http://www.sina.com.cn/test.html',
);
// 返回已url為key的數組,注意,前后順序有可能跟$urls中的不一樣
print_r(
(new \Leaps\HttpClient\HttpClient())->get($urls)
);


post($url, $data, $timeout = 30)
---------
用POST方法提交數據,支持多個頁面同時請求
// 請求單個頁面


(new \Leaps\HttpClient\HttpClient())->post('http://www.baidu.com/',array('a'=>1,'b'=>1));

// 請求多個頁面
$urls = array
(
'http://www.baidu.com/',
'http://www.google.com/',
);
$vars = array
(
array('a'=>1,'b'=>1), //對應 http://www.baidu.com/
array('c'=>1,'d'=>1), //對應 http://www.google.com/
);
(new HttpClient())->get($urls,$vars);




getDriver()
----------
返回當前驅動的對象,有時候需要獲取driver后再進行操作,此時可通過此方法獲取當前對象


(new \Leaps\HttpClient\HttpClient())->getDriver();

項目主頁:http://www.baiduhome.net/lib/view/home/1422795850423

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!