HttpClientDemo
模拟凤凰的将军的登录、领取功勋(未实现)
存储返回的结果类
package com.hry.httpclient;
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.StatusLine;
import org.apache.http.client.CookieStore;
import org.apache.http.cookie.Cookie;
import org.apache.http.util.EntityUtils;
public class Result {
private StatusLine statusLine;
private CookieStore cookieStore;
// private HttpEntity entity;
private String sContent;
private Header[] headers;
public String toString(){
StringBuilder sb = new StringBuilder();
// StatusLine
sb.append(statusLine).append("\r\n");
// header
for(Header o : headers){
sb.append(o.getName()).append("=").append(o.getValue()).append("\r\n");
}
// entity
sb.append(sContent).append("\r\n");
// Cookies
for(Cookie o : cookieStore.getCookies()){
sb.append(o.getName()).append("=").append(o.getValue()).append("\r\n");
}
return sb.toString();
}
public String getHeader(String name){
// Cookies
for(Cookie o : cookieStore.getCookies()){
if(o.getName().equalsIgnoreCase(name)){
return o.getValue();
}
}
return "";
}
public StatusLine getStatusLine() {
return statusLine;
}
public void setStatusLine(StatusLine statusLine) {
this.statusLine = statusLine;
}
public CookieStore getCookieStore() {
return cookieStore;
}
public void setCookieStore(CookieStore cookieStore) {
this.cookieStore = cookieStore;
}
public String getsContent() {
return sContent;
}
public void setsContent(String sContent) {
this.sContent = sContent;
}
public Header[] getHeaders() {
return headers;
}
public void setHeaders(Header[] headers) {
this.headers = headers;
}
}
模拟http的Post、Get类
package com.hry.httpclient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class JiangJun {
public Result post(String sUrl,CookieStore cookieStore, List<NameValuePair> list,
boolean isPropxy )
throws ClientProtocolException, IOException{
DefaultHttpClient client = new DefaultHttpClient();
if(cookieStore != null){
client.setCookieStore(cookieStore);
}
// 代理
if(isPropxy){
HttpHost proxy = new HttpHost("10.36.24.20", 60001);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
//实例化一个post请求
// String sUrl = "http://play.ifeng.com/?_c=jj&_a=Dologin";
// String sUrl = "http://s2.jj.ifeng.com/ifeng_s2/need.py";
HttpPost post = new HttpPost(sUrl);
//设置需要提交的参数
// List<NameValuePair> list = new ArrayList<NameValuePair>();
// list.add(new BasicNameValuePair("username","huangrongyou1"));
// list.add(new BasicNameValuePair("password","111111"));
// list.add(new BasicNameValuePair("inpass","on"));
post.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));
//实行请求并返回
HttpResponse response = client.execute(post);
// 设置返回数据
Result result = new Result();
result.setCookieStore(client.getCookieStore());
result.setsContent(EntityUtils.toString(response.getEntity()));
result.setHeaders(response.getAllHeaders());
result.setStatusLine(response.getStatusLine());
// 释放
post.releaseConnection();
return result;
}
public Result get(String sUrl,CookieStore cookieStore, List<NameValuePair> list,
boolean isPropxy )
throws ClientProtocolException, IOException{
DefaultHttpClient client = new DefaultHttpClient();
if(cookieStore != null){
client.setCookieStore(cookieStore);
}
// 代理
if(isPropxy){
HttpHost proxy = new HttpHost("10.36.24.20", 60001);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
// List<NameValuePair> qparams = new ArrayList<NameValuePair>();
// qparams.add(new BasicNameValuePair("q", "httpclient"));
// qparams.add(new BasicNameValuePair("btnG", "Google Search"));
// qparams.add(new BasicNameValuePair("aq", "f"));
// qparams.add(new BasicNameValuePair("oq", null));
// URI uri = URIUtils.createURI("http", "www.google.com", -1,
// "/search",
// URLEncodedUtils.format(qparams, "UTF-8"), null);
// HttpGet httpget = new HttpGet(uri);
// System.out.println(httpget.getURI());
//实例化一个post请求
// String sUrl = "http://play.ifeng.com/?_c=jj&_a=Dologin";
// String sUrl = "http://s2.jj.ifeng.com/ifeng_s2/need.py";
HttpPost post = new HttpPost(sUrl);
//设置需要提交的参数
// List<NameValuePair> list = new ArrayList<NameValuePair>();
// list.add(new BasicNameValuePair("username","huangrongyou1"));
// list.add(new BasicNameValuePair("password","111111"));
// list.add(new BasicNameValuePair("inpass","on"));
post.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));
//实行请求并返回
HttpResponse response = client.execute(post);
// 设置返回数据
Result result = new Result();
result.setCookieStore(client.getCookieStore());
result.setsContent(EntityUtils.toString(response.getEntity()));
result.setHeaders(response.getAllHeaders());
result.setStatusLine(response.getStatusLine());
// 释放
post.releaseConnection();
return result;
}
}
模拟登录凤凰的将军、领取功勋(未实现);并打印返回的值
package com.hry.httpclient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.CookieStore;
public class HttpClienTest {
//实例化一个Httpclient的
JiangJun jj = new JiangJun();
public Result regedit(boolean isPropxy) throws ClientProtocolException, IOException{
//设置需要提交的参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("username","huangrongyou1"));
list.add(new BasicNameValuePair("password","111111"));
list.add(new BasicNameValuePair("inpass","on"));
String sUrl = "http://play.ifeng.com/?_c=jj&_a=Dologin";
return jj.post(sUrl, null, list, isPropxy);
}
public Result regeditService(Result rs ,boolean isPropxy) throws ClientProtocolException, IOException{
List<NameValuePair> list = new ArrayList<NameValuePair>();
String sUrl = "http://play.ifeng.com/?_c=jj&_a=enterGame&area=2";
return jj.get(sUrl, rs.getCookieStore(),list , isPropxy);
}
public Result regeditService2(Result rs ,boolean isPropxy) throws ClientProtocolException, IOException{
List<NameValuePair> list = this.setNameValuePair(rs);
String sUrl = "http://s2.jj.ifeng.com/accept.py?uid=22859&uname=ifeng222859&lgtime=1338653001&indulge=1&sign=f9975b5dd1b356787e6857cca644f092&1338653001";
return jj.get(sUrl, rs.getCookieStore(),list , isPropxy);
}
public Result regeditTicket(Result rs ,boolean isPropxy) throws ClientProtocolException, IOException{
List<NameValuePair> list = new ArrayList<NameValuePair>();
String sUrl = "http://s2.jj.ifeng.com/index.py";
return jj.get(sUrl, rs.getCookieStore(),list , isPropxy);
}
public Result regeditAccept(Result rs ,boolean isPropxy) throws ClientProtocolException, IOException{
List<NameValuePair> list = this.setNameValuePair(rs);
String sUrl = "http://s2.jj.ifeng.com/accept.py?uid=22859&uname=ifeng222859&lgtime=1338651039&indulge=1&sign=3885d91acbd4247ec8d45d7fc25657b8&1338651039";
return jj.get(sUrl, rs.getCookieStore(),list , isPropxy);
}
public Result getGongxun(Result rs ,boolean isPropxy) throws ClientProtocolException, IOException{
String sUrl = "http://s2.jj.ifeng.com/ifeng_s2/need.py";
//设置需要提交的参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
return jj.post(sUrl, rs.getCookieStore(), list, isPropxy);
}
public Result getTask(Result rs ,String p,String t, boolean isPropxy) throws ClientProtocolException, IOException{
String sUrl = "http://s2.jj.ifeng.com/ifeng_s2/need.py?p="+p+"&t="+t+"&e=1";
//设置需要提交的参数
List<NameValuePair> list = new ArrayList<NameValuePair>();
return jj.post(sUrl, rs.getCookieStore(), list, isPropxy);
}
private List<NameValuePair> setNameValuePair (Result rs){
List<NameValuePair> list = new ArrayList<NameValuePair>();
for(Cookie o : rs.getCookieStore().getCookies()){
list.add(new BasicNameValuePair(o.getName(),o.getValue()));
}
return list;
}
/**
* @param args
* @throws IOException
* @throws ClientProtocolException
*/
public static void main(String[] args) throws ClientProtocolException, IOException {
HttpClienTest t = new HttpClienTest();
boolean isPropxy = false;
Result rs = t.regedit(isPropxy);
System.out.println("regedit");
System.out.println(rs);
rs = t.regeditService(rs, isPropxy);
System.out.println("regeditService");
System.out.println(rs);
rs = t.regeditService2(rs, isPropxy);
System.out.println("regeditService2");
System.out.println(rs);
rs = t.regeditTicket(rs, isPropxy);
System.out.println("regeditTicket");
System.out.println(rs);
rs = t.regeditAccept(rs, isPropxy);
System.out.println("regeditAccept");
System.out.println(rs);
rs = t.getGongxun(rs, isPropxy);
System.out.println("getGongxun");
System.out.println(rs);
rs = t.getTask(rs, "nJ+OypWPqe7EDmXjoBHx15K0T7Vo4p262Pw=", rs.getHeader("ticket"), isPropxy);
System.out.println("getTask");
System.out.println(rs);
}
}
参考文献
- HttpClent教程 官方中文pdf
- Apache HttpClient官网
- httpclient4的封装
- 我们爱分享---HttpClient4之模拟http请求 模拟论坛自动回帖的功能