獲取信息
這是另一個(gè)可選的設(shè)置項(xiàng),能夠在cURL執(zhí)行后獲取這一請求的有關(guān)信息:
// ... curl_exec($ch); $info = curl_getinfo($ch); echo '獲取'. $info['url'] . '耗時(shí)'. $info['total_time'] . '秒'; // ...
返回的數(shù)組中包括了以下信息:
- “url” //資源網(wǎng)絡(luò)地址
- “content_type” //內(nèi)容編碼
- “http_code” //HTTP狀態(tài)碼
- “header_size” //header的大小
- “request_size” //請求的大小
- “filetime” //文件創(chuàng)建時(shí)間
- “ssl_verify_result” //SSL驗(yàn)證結(jié)果
- “redirect_count” //跳轉(zhuǎn)技術(shù)
- “total_time” //總耗時(shí)
- “namelookup_time” //DNS查詢耗時(shí)
- “connect_time” //等待連接耗時(shí)
- “pretransfer_time” //傳輸前準(zhǔn)備耗時(shí)
- “size_upload” //上傳數(shù)據(jù)的大小
- “size_download” //下載數(shù)據(jù)的大小
- “speed_download” //下載速度
- “speed_upload” //上傳速度
- “download_content_length”//下載內(nèi)容的長度
- “upload_content_length” //上傳內(nèi)容的長度
- “starttransfer_time” //開始傳輸?shù)臅r(shí)間
- “redirect_time”//重定向耗時(shí)
基于瀏覽器的重定向
在第一個(gè)例子中,我們將提供一段用于偵測服務(wù)器是否有基于瀏覽器的重定向的代碼。例如,有些網(wǎng)站會(huì)根據(jù)是否是手機(jī)瀏覽器甚至用戶來自哪個(gè)國家來重定向網(wǎng)頁。
我們利用 CURLOPT_HTTPHEADER 選項(xiàng)來設(shè)定我們發(fā)送出的HTTP請求頭信息(http headers),包括user agent信息和默認(rèn)語言。然后我們來看看這些特定網(wǎng)站是否會(huì)把我們重定向到不同的URL。
// 測試用的URL $urls = array( "); // 測試用的瀏覽器信息 $browsers = array( "standard" => array ( "user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5" ), "iphone" => array ( "user_agent" => "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3", "language" => "en" ), "french" => array ( "user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5" ) ); foreach ($urls as $url) { echo "URL: $url\n"; foreach ($browsers as $test_name => $browser) { $ch = curl_init(); // 設(shè)置 url curl_setopt($ch, CURLOPT_URL, $url); // 設(shè)置瀏覽器的特定header curl_setopt($ch, CURLOPT_HTTPHEADER, array( "User-Agent: {$browser['user_agent']}", "Accept-Language: {$browser['language']}" )); // 頁面內(nèi)容我們并不需要 curl_setopt($ch, CURLOPT_NOBODY, 1); // 只需返回HTTP header curl_setopt($ch, CURLOPT_HEADER, 1); // 返回結(jié)果,而不是輸出它 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); // 有重定向的HTTP頭信息嗎? if (preg_match("!Location: (.*)!", $output, $matches)) { echo "$test_name: redirects to $matches[1]\n"; } else { echo "$test_name: no redirection\n"; } } echo "\n\n"; }
首先,我們建立一組需要測試的URL,接著指定一組需要測試的瀏覽器信息。最后通過循環(huán)測試各種URL和瀏覽器匹配可能產(chǎn)生的情況。
因?yàn)槲覀冎付薱URL選項(xiàng),所以返回的輸出內(nèi)容則只包括HTTP頭信息(被存放于 $output 中)。利用一個(gè)簡單的正則,我們檢查這個(gè)頭信息中是否包含了“Location:”字樣。
運(yùn)行這段代碼應(yīng)該會(huì)返回如下結(jié)果:
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 基于PHP的cURL快速入門 [1] 下一頁 基于PHP的cURL快速入門 [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|