某站点下载资源自己主动评论器

        前两天登录某站点我的资源页,发现我的下载资源里有近20页的待评论资源,每个下载资源评论能够得一个资源分,而某站点的资源评论规则是每隔60秒才干评论一次,假设自己一个一个评论的话,得消耗好多时间。因而特开发了一个某站点下载资源评论器,自己主动的为我评论全部未评论的资源。现将该评论工具分享例如以下:

      下载地址:http://url.cn/Q9unBR

      在实现过程中,基本的一个难点是某站点的登录採用的https协议,须要数字证书。

      将核心代码附上:

    1. HTTP请求接口

package suda.mingcai.csdn.http;

public interface IHttpClient
{
	String getPage(String url) throws Exception;
	
	String sendPost(String url, String param) throws Exception;
}

2. HTTP请求基类

package suda.mingcai.csdn.http;

import java.net.CookieHandler;
import java.net.CookieManager;
import java.util.List;

import suda.mingcai.csdn.https.HttpsClient;

public abstract class HttpClient implements IHttpClient
{
	public final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
	public final String ACCEPT = "text/html, application/xhtml+xml, */*";
	
	protected List<String> m_cookies;
	
	static
	{
		CookieHandler.setDefault(new CookieManager());
	}
	
	public static HttpClient createHttpRequest(String url)
	{
		if(url.startsWith("https"))
			return new HttpsClient();
		else
			return new HttpRequest();
	}
	
	public void setCookies(List<String> cookies)
	{
		this.m_cookies = cookies;
	}
	
	public List<String> getCookies()
	{
		return this.m_cookies;
	}
	
	public abstract String getPage(String url) throws Exception;
	public abstract String sendPost(String url, String param) throws Exception;

}

      3. HTTPS Request

package suda.mingcai.csdn.https;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

import suda.mingcai.csdn.http.HttpClient;

public class HttpsClient extends HttpClient
{
	private HttpsURLConnection m_conn;	
	
	@Override
	public String getPage(String url) throws Exception
	{
		URL u = new URL(url);
		m_conn = (HttpsURLConnection) u.openConnection();
		
		m_conn.setRequestMethod("GET");
		m_conn.setUseCaches(false);
		//set request headers
		m_conn.setRequestProperty("User-Agent", USER_AGENT);
		m_conn.setRequestProperty("Accept", ACCEPT);
		m_conn.setRequestProperty("Accept-Lauguage", "zh-CN,zh;q=0.8,en;q=0.6");
		//set cookies
		if (m_cookies != null)
		{
			String cookies = "";
			for (String cookie : m_cookies)
			{
				cookies += ";" + cookie;
			}
			m_conn.addRequestProperty("Cookie", cookies);
		}
		//get response
		BufferedReader reader = new BufferedReader(new InputStreamReader(m_conn.getInputStream()));
		StringBuffer response = new StringBuffer();
		String line;
		while((line = reader.readLine()) != null)
			response.append(line);
		m_cookies = m_conn.getHeaderFields().get("Set-Cookie");
		reader.close();
		return response.toString();
	}
	
	public String sendPost(String url, String params) throws Exception
	{
		StringBuilder builder = new StringBuilder();
		URL u = new URL(url);
		m_conn = (HttpsURLConnection) u.openConnection();
		
		m_conn.setUseCaches(false);
		m_conn.setRequestMethod("POST");
		m_conn.setRequestProperty("User-Agent", USER_AGENT);
		m_conn.setRequestProperty("Accept", ACCEPT);
		m_conn.setRequestProperty("Accept-Lauguage", "zh-CN,zh;q=0.8,en;q=0.6");
		m_conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		m_conn.setRequestProperty("Referer", "https://passport.website.net/account/login");
		m_conn.setRequestProperty("Connection", "keep-alive");
		//set cookies
		m_conn.setRequestProperty("Content-Length", params.length() + "");
		System.out.println("send cookies...");
		if(m_cookies != null)
		{
			String cookies = "";
			for(String cookie : m_cookies)
			{
				cookies += ";" + cookie;
			}
			m_conn.addRequestProperty("Cookie", cookies);
		}
		
		m_conn.setDoOutput(true);
		m_conn.setDoInput(true);
		
		PrintWriter out = new PrintWriter(m_conn.getOutputStream());
		out.print(params);
		out.flush();
		out.close();
		
		int code = m_conn.getResponseCode();
		if(code == 200)
		{
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					m_conn.getInputStream()));
			String line;
			while ((line = reader.readLine()) != null)
				builder.append(line);
			reader.close();
			System.out.println("login successfully!");
		}
		else if(code == 302)
		{
			String redictUrl = m_conn.getHeaderFields().get("Location").get(0);
			builder.append(redictUrl);
		}
		m_cookies = m_conn.getHeaderFields().get("Set-Cookie");		
		return builder.toString();
	}
	
}

     4. HTTP Request

package suda.mingcai.csdn.http;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpRequest extends HttpClient
{
	private HttpURLConnection m_conn;

	@Override
	public String getPage(String url) throws Exception
	{
		URL u = new URL(url);
		m_conn = (HttpURLConnection) u.openConnection();

		m_conn.setRequestMethod("GET");
		m_conn.setUseCaches(false);
		// set request headers
		m_conn.setRequestProperty("User-Agent", USER_AGENT);
		m_conn.setRequestProperty("Accept", ACCEPT);
		m_conn.setRequestProperty("Accept-Lauguage", "zh-CN,zh;q=0.8,en;q=0.6");
		//set cookies
		if (m_cookies != null)
		{
			String cookies = "";
			for (String cookie : m_cookies)
			{
				cookies += ";" + cookie;
			}
			m_conn.addRequestProperty("Cookie", cookies);
		}
		// get response
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				m_conn.getInputStream()));
		StringBuffer response = new StringBuffer();
		String line;
		while ((line = reader.readLine()) != null)
			response.append(line);
		m_cookies = m_conn.getHeaderFields().get("Set-Cookie");
		reader.close();
		return response.toString();
	}

	public String sendPost(String url, String params) throws Exception
	{
		StringBuilder builder = new StringBuilder();
		URL u = new URL(url);
		m_conn = (HttpURLConnection) u.openConnection();

		m_conn.setUseCaches(false);
		m_conn.setRequestMethod("POST");
		m_conn.setRequestProperty("User-Agent", USER_AGENT);
		m_conn.setRequestProperty("Accept", ACCEPT);
		m_conn.setRequestProperty("Accept-Lauguage", "zh-CN,zh;q=0.8,en;q=0.6");
		m_conn.setRequestProperty("Content-Type",
				"application/x-www-form-urlencoded");
		m_conn.setRequestProperty("Referer",
				"https://passport.website.net/account/login");
		m_conn.setRequestProperty("Connection", "keep-alive");
		m_conn.setRequestProperty("Host", "passport.website.net");
		// set cookies
		m_conn.setRequestProperty("Content-Length", params.length() + "");
		
		if (m_cookies != null)
		{
			String cookies = "";
			for (String cookie : m_cookies)
			{
				cookies += ";" + cookie;
			}
			m_conn.addRequestProperty("Cookie", cookies);
		}
		
		m_conn.setDoOutput(true);
		m_conn.setDoInput(true);
		
		PrintWriter out = new PrintWriter(m_conn.getOutputStream());
		out.print(params);
		out.flush();
		out.close();
		
		int code = m_conn.getResponseCode();
		if (code == 200)
		{
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					m_conn.getInputStream()));
			String line;
			while ((line = reader.readLine()) != null)
				builder.append(line);
			reader.close();
		}
		else if (code == 302)
		{
			String redictUrl = m_conn.getHeaderFields().get("Location").get(0);
			builder.append(redictUrl);
		}
		m_cookies = m_conn.getHeaderFields().get("Set-Cookie");
		return builder.toString();
	}
}


      鉴于时间关系,不着过多介绍,实现原理不是太难,有兴趣的朋友能够直接下载源代码。



posted @ 2014-09-09 16:39  mfrbuaa  阅读(220)  评论(0编辑  收藏  举报