WebjxCom提示:今天我们一起学习了cURL库的强大功能和灵活的扩展性
。希望你喜欢
。下一次要发起URL请求时
,考虑下cURL吧!
获取信息
这是另一个可选的设置项
,能够在cURL执行后获取这一请求的有关信息:
//...
curl_exec($ch);
$info=curl_getinfo($ch);
echo'获取'.$info['url'].'耗时'.$info['total_time'].'秒';
//...
返回的数组中包括了以下信息:
“url”//资源网络地址
“content_type”//内容编码
“http_code”//HTTP状态码
“header_size”//header的大小
“request_size”//请求的大小
“filetime”//文件创建时间
“ssl_verify_result”//SSL验证结果
“redirect_count”//跳转技术
“total_time”//总耗时
“namelookup_time”//DNS查询耗时
“connect_time”//等待连接耗时
“pretransfer_time”//传输前准备耗时
“size_upload”//上传数据的大小
“size_download”//下载数据的大小
“speed_download”//下载速度
“speed_upload”//上传速度
“download_content_length”//下载内容的长度
“upload_content_length”//上传内容的长度
“starttransfer_time”//开始传输的时间
“redirect_time”//重定向耗时
基于浏览器的重定向
在第一个例子中,我们将提供一段用于侦测
服务器是否有基于浏览器的重定向的代码。例如,有些网站会根据是否是手机浏览器甚至用户来自哪个国家来重定向网页。
我们利用CURLOPT_HTTPHEADER选项来设定我们发送出的HTTP请求头信息(httpheaders),包括useragent信息和默认语言。然后我们来看看这些特定网站是否会把我们重定向到不同的URL。
//测试用的URL
$urls=array(
"
http://www.cnn.com",
"
http://www.mozilla.com",
"
http://www.facebook.com"
);
//测试用的浏览器信息
$browsers=array(
"standard"=>array(
"user_agent"=>"Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6(.NETCLR3.5.30729)",
"language"=>"en-us,en;q=0.5"
),
"iphone"=>array(
"user_agent"=>"Mozilla/5.0(iPhone;U;CPUlikeMacOSX;en)AppleWebKit/420+(KHTML,likeGecko)Version/3.0Mobile/1黑客防线37aSafari/419.3",
"language"=>"en"
),
"french"=>array(
"user_agent"=>"Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;GTB6;.NETCLR2.0.50727)",
"language"=>"fr,fr-FR;q=0.5"
)
);
foreach($urlsas$url){
echo"
URL:$url
";
foreach($browsersas$test_name=>$browser){
$ch=curl_init();
//设置url
curl_setopt($ch,CURLOPT_URL,$url);
//设置浏览器的特定header
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
"User-Agent:{$browser['user_agent']}",
"Accept-Language:{$browser['language']}"
));
//页面内容我们并不需要
curl_setopt($ch,CURLOPT_NOBODY,1);
//只需返回HTTPheader
curl_setopt($ch,CURLOPT_HEADER,1);
//返回结果,而不是输出它
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$output=curl_exec($ch);
curl_close($ch);
//有重定向的HTTP头信息吗?
if(preg_match("!Location:(.*)!",$output,$matches)){
echo"$test_name:redirectsto$matches[1]
";
}else{
echo"$test_name:noredirection
";
}
}
echo"
";
}
首先,我们建立一组需要测试的URL,接着指定一组需要测试的浏览器信息。最后通过循环测试各种URL和浏览器匹配可能产生的情况。
因为我们指定了cURL选项,所以返回的输出内容则只包括HTTP头信息(被存放于$output中)。利用一个简单的正则,我们检查这个头信息中是否包含了“Location:”字样。
运行这段代码应该会返回如下结果: