经过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());
}
}
}
分享到:
相关推荐
在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...
在本实例中,我们将探讨如何使用HttpClient库来模拟登录网站,获取用户信息,以及处理带有验证码的登录场景。 首先,我们需要理解HttpClient的基本使用。HttpClient的核心类包括HttpClient本身,HttpGet、HttpPost...
这篇最新的文章“HttpClient4模拟登录腾讯微博”探讨了如何利用HttpClient4实现对腾讯微博的模拟登录,这在自动化测试、数据抓取等场景中非常实用。 HttpClient4库提供了丰富的API,可以定制化地构造HTTP请求,包括...
本文将深入探讨如何使用Java中的HttpClient4库来实现对新浪和腾讯微博的模拟登录。HttpClient4是一个强大的HTTP客户端库,它允许开发者执行HTTP请求并处理响应,非常适合进行网页交互。 首先,我们来看`Sina.java`...
本篇文章将详细讲解如何使用HttpClient进行模拟登录操作,结合源码分析,帮助开发者深入理解其工作原理。 HttpClient库由Apache基金会开发,提供了全面的HTTP协议支持,包括标准与扩展的HTTP方法、连接管理、重试...
总的来说,HttpClient4提供了一个强大而灵活的框架,可以用来模拟登录各种网站,包括百度和58同城。然而,每个网站的登录机制都有所不同,所以需要根据具体情况进行调整和优化。在开发过程中,务必遵守网站的使用...
httpclient4 微信公众账号模拟登陆,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。
本文将详细讲解如何使用HTTPClient来保持session会话,从而实现模拟登录后的其他操作。 首先,理解session的概念至关重要。Session是服务器端用来跟踪用户状态的一种机制。在Web应用中,当用户登录后,服务器会为该...
Java模拟淘宝登录源码是一种常见的网络编程技术,主要...在实际开发中,为了提高代码的可维护性和复用性,通常会封装成一个通用的模拟登录类,包含初始化HTTPClient、构造请求、处理响应等功能,以适应不同的登录场景。
在这个场景中,我们将探讨如何使用HttpClient实现模拟登录操作。 首先,了解HttpClient的基本使用。HttpClient库提供了HttpClient实例,用于发送HTTP请求。创建HttpClient实例可以通过`HttpClientBuilder`类: ```...
以下是一个简单的使用HttpClient 4登录博客网站的步骤: 1. **创建HttpClient实例**:首先,我们需要创建一个`CloseableHttpClient`对象,这是HttpClient的主要入口点。我们可以使用`HttpClientBuilder`来构建它,...
本篇文章将详细讲解如何利用HttpClient 4.3版本来模拟登录新版12306(中国铁路客户服务中心网站)。 1. **HttpClient介绍** HttpClient是Apache的一个开源项目,它提供了强大的HTTP协议处理能力和灵活的HTTP客户端...
JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...
但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的***页...
### HTTPClient 模拟登录详解 #### 一、概述 HTTPClient是Apache组织下的一个开源项目,它提供了功能丰富的HTTP客户端开发工具包,可以用来发送HTTP请求并接收响应。利用HTTPClient,我们可以轻松实现模拟登录的...
Java Web 中 HttpClient 模拟浏览器登录后发起请求 Java Web 中 HttpClient 模拟浏览器登录后发起请求是指在 Java Web 应用程序中使用 HttpClient 库模拟浏览器的行为,模拟浏览器登录到服务器,然后发起请求获取...
随着技术的发展,从早期的HttpClient 3.x版本迁移到更新的HttpComponents HttpClient 4.x版本是一个常见的需求。这不仅仅是一个简单的升级过程,而是涉及到对API的变化、编程模型的更新以及对网络编程的更深层次理解...