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();
    	}
    }
    


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

    
    
  • 相关阅读:
    obs问题记录
    树莓派数字识别相关资料
    Focus Event
    跨浏览器的事件对象
    浅谈Javascript事件模拟
    浅谈Javascript鼠标和滚轮事件
    UI Events
    IE事件对象(The Internet Explorer Event Object)
    eclipse 调试nodejs 发生Failed to connect to standalone V8 VM错误的解决方案
    关于couldn't connect to server 127.0.0.1 shell/mongo.js:84 exception: connect failed 问题
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3962938.html
Copyright © 2011-2022 走看看