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请求 模拟论坛自动回帖的功能