某网站下载资源自动述评器
某网站下载资源自动评论器
前两天登录某网站我的资源页,发现我的下载资源里有近20页的待评论资源,每一个下载资源评论可以得一个资源分,而某网站的资源评论规则是每隔60秒才能评论一次,如果自己一个一个评论的话,得消耗好多时间。因而特开发了一个某网站下载资源评论器,自动的为我评论所有未评论的资源。现将该评论工具分享如下:
3. HTTPS Request
4. HTTP Request
前两天登录某网站我的资源页,发现我的下载资源里有近20页的待评论资源,每一个下载资源评论可以得一个资源分,而某网站的资源评论规则是每隔60秒才能评论一次,如果自己一个一个评论的话,得消耗好多时间。因而特开发了一个某网站下载资源评论器,自动的为我评论所有未评论的资源。现将该评论工具分享如下:
下载地址:http://url.cn/K3NqCm
在实现过程中,主要的一个难点是某网站的登录采用的https协议,需要数字证书。
将核心代码附上:
1. HTTP请求接口
package suda.mingcai.****.http; public interface IHttpClient { String getPage(String url) throws Exception; String sendPost(String url, String param) throws Exception; }
2. HTTP请求基类
package suda.mingcai.****.http; import java.net.CookieHandler; import java.net.CookieManager; import java.util.List; import suda.mingcai.****.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.****.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.****.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.****.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(); } }
鉴于时间关系,不着过多介绍,实现原理不是太难,有兴趣的朋友可以直接下载源码。