使用httpclient4.0.1登录百度,具体步骤如下:
- 访问百度首页获取首页HMTL内容
- 使用百度帐号登陆百度
- 重复第一步,这时可以比较两次获取的HTML的差别
如果感兴趣想测试的同学,可以去网站上下载需要的Jar包,然后执行一下看看!!
下面附上具体测试的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.client.params.CookiePolicy;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
/**
* 使用httpclient4登陆百度
* @author gohands
*
*/
public class BaiduLogin {
private static String URL_CHARACTER = "gb2312"; // 统一字符集
/**
* @param args
*/
public static void main(String[] args) throws Exception {
//初始化
DefaultHttpClient httpclient = new DefaultHttpClient();
// 这一行必须要加,否则服务器无法获取登陆状态
HttpClientParams.setCookiePolicy(httpclient.getParams(),CookiePolicy.BROWSER_COMPATIBILITY);
// 第一次访问
String url = "http://www.baidu.com";
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
System.out.println("Length1::" + response.getEntity().getContentLength());
HttpEntity entity = response.getEntity();
BaiduLogin.printEntity(entity);
// 登陆【使用POST方式登录】
// 如果要直接执行,麻烦去申请个百度的帐号
// 不好意思,给百度做广告了
HttpPost httpost = new HttpPost("http://passport.baidu.com/?login");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", "gohands"));
nvps.add(new BasicNameValuePair("password", "*******"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, BaiduLogin.URL_CHARACTER));
response = httpclient.execute(httpost);
// 第二次访问
System.out.println("\n----------------------------------------");
System.out.println(response.getStatusLine());
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
entity = response.getEntity();
BaiduLogin.printEntity(entity);
System.out.println("\n----------------------------------------");
cookies = httpclient.getCookieStore().getCookies();
System.out.println("cookies" + cookies.size());
httpget = new HttpGet(url);
// httpget.setr
// httpget.setHeader(name, value)
response = httpclient.execute(httpget);
System.out.println("Length2::"
+ response.getEntity().getContentLength());
entity = response.getEntity();
BaiduLogin.printEntity(entity);
}
/**
* 输出entity内容,获取和输出返回的HTML文
* @param entity
* @throws IllegalStateException
* @throws IOException
*/
private static void printEntity(HttpEntity entity)
throws IllegalStateException, IOException {
if (entity == null) {
return;
}
System.out.println("HttpEntity start >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println("Response content length: " + entity.getContentLength());
InputStream is = entity.getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
List<Byte> li = new ArrayList();
int i;
//之所以写的如此复杂是因为了解决中文问题
while ((i = is.read()) != -1) {
li.add((byte) i);
}
byte a[] = new byte[li.size()];
for (i = 0; i < a.length; i++) {
a[i] = (byte) li.get(i);
}
System.out.println(new String(a, BaiduLogin.URL_CHARACTER)); // 打印HTML内容
entity.consumeContent(); // entity销毁
System.out.println("HttpEntity END >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
}
如果有疑问或好的想法随时可以跟我沟通,谢谢阅读!
依赖的Jar包
apache-mime4j-0.6.jar
commons-codec-1.3.jar
commons-logging-1.1.1.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
httpmime-4.0.1.jar
-----------------------------------------------------------
2015/02/02:
好几年前写的代码了,
现在前端渲染开发比较多,画面上全是JS封装的,
这段代码已经不能正常使用了。
相关推荐
本主题将深入探讨如何使用HttpClient4库进行百度和58同城的模拟登陆操作。HttpClient4是一个强大的Java库,它提供了丰富的功能来执行HTTP请求,非常适合进行网页交互。 首先,我们来了解HttpClient4的基本用法。...
在使用 HttpClient 时,我们可以通过 setCookieStore 方法将 Cookie 添加到 HttpClient 中,这样在下次请求中,HttpClient 会自动携带 Cookie。但是,这种方法需要注意 Cookie 的路径、域名和过期时间等信息,如果不...
本项目"**C#版本模拟登陆百度,2018年4月27日可用**"提供了一个C#语言编写的程序,专门用于模拟用户登录百度网站,而且在发布时是有效的。这个程序的独特之处在于,它不仅能够完成基本的登录操作,还为开发者提供了...
这篇博客“模拟登陆百度的Java实现”提供了一个使用Java编程语言来模拟登录百度网站的实例。以下将详细介绍这个过程中的关键知识点。 首先,我们需要理解HTTP协议的基础,特别是GET和POST请求。在登录过程中,...
在Java中,我们可以使用`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp来实现。这里我们可能主要使用`HttpURLConnection`,因为它是Java标准库的一部分,无需额外引入依赖。 1. **构建请求头**: ...
在C#中,我们可以使用`System.Net.WebClient`或`System.Net.Http.HttpClient`类来发送POST请求。在本例中,可能需要获取登录页面的CSRF令牌,这通常隐藏在HTML源码中的一个输入字段内,然后将其添加到登录数据中。 ...
在Java中,我们可以使用HttpURLConnection、HttpClient或Apache的OkHttp等库来完成网络请求。本例中,我们以HttpURLConnection为例,因为它是Java标准库的一部分,无需额外引入依赖。 1. **构建登录请求**: - ...
本篇将深入探讨如何使用Java语言来实现模拟百度登录的过程。 首先,我们需要了解登录过程的基本步骤。通常,登录一个网站涉及以下几个环节: 1. 用户输入用户名和密码。 2. 发送HTTP请求到服务器,携带用户名和...
对于标签"Java",在实现这个过程时,Java开发者可能会使用诸如`HttpURLConnection`或者第三方库如Apache HttpClient来发起HTTP请求,与百度AI的服务器通信。同时,他们还需要处理返回的结果,根据API文档解析JSON...
这是一款网站客户端开发的案例,该案例实现了用到了图书馆的一些数据,图书馆用的系统又没提供数据接口,所以老规矩,用HttpClient和Jsoup这两大开源工程上,用Android手机来模拟图书馆查询的请求与响应,网站是学校...
8. Httpclient破解验证码,登陆联通充值平台 9. 汉字、英文拆分、可以用作文档关键字搜索等。 10. Base64图片处理,支持PC,Android,IOS 11. Service Socket 、Client Socket 通信技术(已经做过GPRS数据获取,并...
这是一款一款网站客户端开发的案例,该案例实现了用到了图书馆的一些数据,图书馆用的系统又没提供数据接口,所以老规矩,用HttpClient和Jsoup这两大开源工程上,用Android手机来模拟图书馆查询的请求与响应,网站是...