获取指定网站的访问信息

之前一直使用了一段时间php发送请求的curl库,感觉很好用,最近的一个项目模块需要从不同地方的服务器获取用户指定的网站的访问信息,如域名解析时间,建立连接时间,下载时间,网速等信息,这些信息刚好封装在了curl_getinfo函数返回的数组中,可以很好的利用起来。

其实,curl的精华就在于设置CURLOPT,php在这里面融入了所有的内容,完全活用真的是要很大的功夫。我试着封装在了一个类中,仅以后学习参考。也不多说,直接上代码:

测试服务器端:

<?php
/**
 *@project    Page speed test
 *@author     OshynSong <dualyangsong@gmail.com>
 *@time       2013-9-30
 *@copyright  All rights reserved!
 */
 
class PageSpeed
{
	/**
	 *@access   private
	 *@desc     The whole info to return
	 */
	private $speedInfo = array('status' => '1', 'info' => '');
	private $curlOpt = array();
	private $curlHandle;
	public function __construct($opt)
	{
		$this -> curlHandle = curl_init();
		if (!preg_match("/^http(s)?:\/\/([0-9a-z\-]+\.)+(\w)+$/im", $opt['url']))
		{
			$this -> speedInfo['status'] = '0';
			$this -> speedInfo['info'] = 'URL格式错误!';
		}
		else 
			$this -> curlOpt[CURLOPT_URL] = $opt['url'];
		
		//设置header
		if (isset($opt['header']))  
			$this -> curlOpt[CURLOPT_HEADER] = $opt['header'];
		else 
			$this -> curlOpt[CURLOPT_HEADER] = false;
		
		//设置port
		if (isset($opt['port']))  
			$this -> curlOpt[CURLOPT_PORT] = $opt['port'];
		else 
			$this -> curlOpt[CURLOPT_PORT] = 80;
		
		//设置timeout
		if (isset($opt['timeout_ms']))  
			$this -> curlOpt[CURLOPT_TIMEOUT_MS] = $opt['timeout_ms'];
		else 
			$this -> curlOpt[CURLOPT_TIMEOUT_MS] = 30000;
		
		//设置protocols
		if (isset($opt['protocols']))  
		{
			$this -> curlOpt[CURLOPT_PROTOCOLS] = $opt['protocols'];
			$this -> curlOpt[CURLOPT_SSL_VERIFYPEER] = false;
			$this -> curlOpt[CURLOPT_SSL_VERIFYHOST] = 1;
		}
		
		//设置encoding
		if (isset($opt['encoding']))  
			$this -> curlOpt[CURLOPT_ENCODING] = $opt['encoding'];
		else 
			$this -> curlOpt[CURLOPT_ENCODING] = 'gzip';
			
		//设置http_version
		if (isset($opt['http_version']))  
			$this -> curlOpt[CURLOPT_HTTP_VERSION] = $opt['http_version'];
		else 
			$this -> curlOpt[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_NONE ;
		
		//设置low_speed_limit
		if (isset($opt['low_speed_limit']) && intval($opt['low_speed_limit']))  
			$this -> curlOpt[CURLOPT_LOW_SPEED_LIMIT] = $opt['low_speed_limit'];
		else 
			$this -> curlOpt[CURLOPT_LOW_SPEED_LIMIT] = 100;
		
		//设置low_speed_time
		if (isset($opt['low_speed_time']) && intval($opt['low_speed_time']))  
			$this -> curlOpt[CURLOPT_LOW_SPEED_TIME] = $opt['low_speed_time'];
		else 
			$this -> curlOpt[CURLOPT_LOW_SPEED_TIME] = 1;
		
		//设置referer
		if (isset($opt['referer']))  
			$this -> curlOpt[CURLOPT_REFERER] = $opt['referer'];
		else 
			$this -> curlOpt[CURLOPT_REFERER] = 'http://www.baidu.com';
		
		//设置useragent
		if (isset($opt['useragent']))  
			$this -> curlOpt[CURLOPT_USERAGENT] = $opt['useragent'];
		else 
			$this -> curlOpt[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31';
	
		$this -> curlOpt[CURLOPT_RETURNTRANSFER] = true;		
		$this -> curlOpt[CURLOPT_HTTPHEADER] = array('Expect:');
		
	}
	
	public function __destruct()
	{
		curl_close($this -> curlHandle);
	}
	
	/**
	 *@name      GetSpeedInfo
	 *@para      array opt
	 *@return    json
	 */
	public function GetSpeedInfo()
	{
		if ($this -> speedInfo['status'] === '0')
		{
			return json_encode($this -> speedInfo);
			exit;
		}		
		curl_setopt_array($this -> curlHandle, $this -> curlOpt);
		$curlData = curl_exec($this -> curlHandle);
		$curlErrno = curl_errno($this -> curlHandle);
		$curlError = curl_error($this -> curlHandle);
		
		if ($curlErrno > 0)
		{
			$this -> speedInfo['status'] = '0';
            $this -> speedInfo['info'] = "cURL Error ($curlErrno): $curlError \n";
        }
		else
		{
			$this -> speedInfo['status'] = '1';
			$this -> speedInfo['info'] = curl_getinfo($this -> curlHandle);
			$this -> speedInfo['info']['loc'] = $this -> getLocation($_SERVER['SERVER_ADDR']);
        }
		
		return json_encode($this -> speedInfo);
	}
}
?>
调用:
$speedObj = new PageSpeed($curlopt);
echo $speedObj -> GetSpeedInfo();


在客户端获取用户输入网址后,请求服务器端获取信息。


有需要的可以参考~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取网站的访问量,可以使用Java中的HttpURLConnection和Jsoup库来实现。 HttpURLConnection是Java标准库中用于发送HTTP请求的类,可以使用该类发送GET请求来获取网站的访问量。具体步骤如下: 1. 构造URL对象,指定要访问的网站地址。 2. 打开连接,并设置请求头信息,模拟浏览器访问。 3. 发送GET请求,获取响应内容。 4. 从响应内容中解析出网站的访问量。 例如,以下代码可以获取CSDN网站的访问量: ```java import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class Test { public static void main(String[] args) throws IOException { String url = "https://blog.csdn.net/"; String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); con.setRequestProperty("User-Agent", userAgent); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { Document doc = Jsoup.parse(con.getInputStream(), "UTF-8", url); String views = doc.select(".grade-box .grade-data span").get(1).text(); System.out.println("CSDN访问量:" + views); } else { System.out.println("GET请求失败,响应码为:" + responseCode); } } } ``` 该代码使用Jsoup库解析HTML页面,获取CSDN网站的访问量。注意,这里获取的是CSDN博客的访问量,而不是整个网站的访问量。如果要获取整个网站的访问量,需要找到相应的API接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值