在工作中需要用到curl 远程获取数据,但是访问速度太慢了,有时候需要10几秒到20秒,查了下原因,原来是DNS域名解析速度太慢了,所以,这里我们需要先获取抓取网站的域名的IP,然后再进行处理,经过将域名替换为对应的IP后速度大大的提高了,只用不到3秒就可抓取到数据。
请看示例:
// 例如,抓取该网站的信息www.digtime.cn,正常域名速度非常慢,需要十几秒// $url = 'http://digtime.cn/article/20';// 根据域名获取IP 120.25.60.5 $ip = gethostbyname("www.digtime.cn"); $url = 'http://'.$ip.'/article/20'; $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $url ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); $output = curl_exec ( $curl ); curl_close ( $curl ); print_r($output);// 此案例可用于解决微信第三方获取Token信息慢的问题:function get_token($options){ // 域名解析 api.weixin.qq.com => 183.57.48.62 $appid = $options['appid']; $secret = $options['secret']; $code = $options['code']; $url = 'https://183.57.48.62/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code'; $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $url ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); $output = curl_exec ( $curl ); curl_close ( $curl ); return json_decode($output, true);}
所用到的方法参考:
gethostbyname
返回 IP 网址。
语法: string gethostbyname(string hostname);
返回值: 字符串
函数种类: 网络系统
本函数可返回某个机器名称 (Domain Name) 的 IP 网址 (IP Address)。若执行失败,则返回原来的机器名称。
下例的返回值为 140.137.33.246
<? echo gethostbyaddr("www.hkcc.pccu.edu.tw"); ?>此博客来源: