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