zoukankan      html  css  js  c++  java
  • 某站点下载资源自己主动评论器

            前两天登录某站点我的资源页,发现我的下载资源里有近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();
    	}
    }
    


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

    
    
  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3962938.html
Copyright © 2011-2022 走看看