前两天登录某站点我的资源页,发现我的下载资源里有近20页的待评论资源,每个下载资源评论能够得一个资源分,而某站点的资源评论规则是每隔60秒才干评论一次,假设自己一个一个评论的话,得消耗好多时间。因而特开发了一个某站点下载资源评论器,自己主动的为我评论全部未评论的资源。现将该评论工具分享例如以下:
3. HTTPS Request
4. HTTP Request
在实现过程中,基本的一个难点是某站点的登录採用的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();
}
}
鉴于时间关系,不着过多介绍,实现原理不是太难,有兴趣的朋友能够直接下载源代码。