经过HttpClient3 的N次处理,发现HttpClient3对Cookie的管理不是太好,总是传值出现问题,可以用HttpClient4一比较,发现他对Cookie的管理实在是太好了,不需要你去处理,下面是关于HttpClient4模拟登录回贴的代码,希望对用到这方面的朋友提供参考
package com.httpclient4;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
public class MainLogin {
public static void main(String[] args) throws ClientProtocolException,
IOException {
HttpClient httpClient = new DefaultHttpClient();
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("u_name", "jbeduhai"));
formparams.add(new BasicNameValuePair("u_passwd", "xxx"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,
"UTF-8");
HttpPost httppost = new HttpPost("http://passport.xxx.com.cn/login.jsp");
httppost.setEntity(entity);
HttpContext localContext = new BasicHttpContext();
HttpResponse response2 = httpClient.execute(httppost, localContext);
int statusCode = response2.getStatusLine().getStatusCode();
System.out.println("statusCode:" + statusCode);
System.out.println(EntityUtils.toString(response2.getEntity(),"UTF-8"));
EntityUtils.consume(response2.getEntity());
if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY
|| statusCode == HttpStatus.SC_SEE_OTHER
|| statusCode == HttpStatus.SC_TEMPORARY_REDIRECT) {
String newUrl = response2.getLastHeader("Location").getValue();
System.out.println("从新定向的页面为:" + newUrl);
HttpGet get = new HttpGet(newUrl);
HttpEntity entity2 = httpClient.execute(get, localContext)
.getEntity();
String homePage = EntityUtils.toString(entity2,"UTF-8");
System.out.println(homePage);
EntityUtils.consume(entity2);
//取formhash值
String formhash =null;
if(homePage.indexOf("formhash=") != -1){
int pos = homePage.indexOf("formhash=");
formhash = homePage.substring(pos+9, pos+17);
System.out.println("------formhash="+formhash);
}
List<NameValuePair> postFormparams = new ArrayList<NameValuePair>();
postFormparams.add(new BasicNameValuePair("message", "很强的贴子啊,顶一个..."));
postFormparams.add(new BasicNameValuePair("subject", ""));
postFormparams.add(new BasicNameValuePair("formhash", formhash));
UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(postFormparams,
"UTF-8");
String pUrl="http://www.xxx.cn/forum.php?mod=post&action=reply&fid=1270&tid=14365186&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost";
HttpPost post3 = new HttpPost(pUrl);
post3.setEntity(postEntity);
HttpContext localContext3 = new BasicHttpContext();
HttpResponse response3 = httpClient.execute(post3, localContext3);
int statusCode3 = response3.getStatusLine().getStatusCode();
System.out.println("statusCode3:" + statusCode3);
System.out.println(EntityUtils.toString(response3.getEntity(),"UTF-8"));
EntityUtils.consume(response3.getEntity());
}
}
}
分享到:
相关推荐
模拟登录 不提供用户名密码
HttpClient模拟登录实例,模拟登录网站,获取用户信息,登录后数据,带验证码登录,带解析HTML实例。
此资源为新浪微博和腾讯微博的HttpClient4模拟登录的代码Sina.java为新浪的,TencentClient.java为腾讯的。
httpclient4 微信公众账号模拟登陆,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。
NULL 博文链接:https://zrzking.iteye.com/blog/1946063
httpclient模拟登录淘宝源码,测试可用。5分重别人那下下来的,jar包没有的我都加全了 httpclient模拟登录淘宝源码,测试可用。5分重别人那下下来的,jar包没有的我都加全了
NULL 博文链接:https://shaozhen.iteye.com/blog/950472
用HttpClient来模拟浏览器GET_POST,技术简单学!!
HttpClient4.3模拟登陆新版12306
但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的***页...
JAVA-用HttpClient来模拟浏览器GET,POST.docx
主要介绍了java web中 HttpClient模拟浏览器登录后发起请求的相关资料,需要的朋友可以参考下
httpclient发送模拟工具,可是想post,get等方式的发送,简单易用,通俗易懂
帮助程序员快速从Apache的HttpClient 3.x升级到HttpClient 4.x
NULL 博文链接:https://heritrix.iteye.com/blog/1144961
httpclient4之百度模拟登陆,回复与58同城自动登陆
HttpClient模拟http发送post和get请求
httpclient4中文教程 httpclient4