某網站下載資源自動評論器

來源:互聯網
上載者:User

        前兩天登入某網站我的資源頁,發現我的下載資源裡有近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();elsereturn 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;@Overridepublic 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 headersm_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 cookiesif (m_cookies != null){String cookies = "";for (String cookie : m_cookies){cookies += ";" + cookie;}m_conn.addRequestProperty("Cookie", cookies);}//get responseBufferedReader 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 cookiesm_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;@Overridepublic 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 headersm_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 cookiesif (m_cookies != null){String cookies = "";for (String cookie : m_cookies){cookies += ";" + cookie;}m_conn.addRequestProperty("Cookie", cookies);}// get responseBufferedReader 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 cookiesm_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();}}


      鑒於時間關係,不著過多介紹,實現原理不是太難,有興趣的朋友可以直接下載源碼。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.