使用HttpClient模拟浏览器

最近研究一下某个软件的接口,不得不使用一下模拟浏览器去对接。于是今天我就研究了一下。

如何模拟浏览器?一般的http请求还简单,关键是要模拟登录记住session等等就非常麻烦了。幸好apache提供了一个工具包,其实很多人也用过这个,就是httpclient-x.x.jar(最开始我一直没有分清楚和common-httpclient的区别,我一直以为是两个东西,结果google后发现是一个东西,官方推荐使用httpclient-x.x.jar这一个)。

例子:

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://xxxx");
post.addHeader("xxxx", "xxxx"); // 添加一些浏览器信息,不知道请ctrl+shift+j,点击network查询request headers。
// 参数
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("xxxx", "xxxx"));
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse response = client.execute(post); // 执行请求
// 读取返回内容
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String tmp = null;
while ((tmp = br.readLine()) != null) {
	System.out.println(tmp);
}
/**
* 这个时候cookie其实已经存在我们的HttpClient里面了。我们不要重新new httppost了。
* 如果我们要修改请求地址我们只需要修改url就可以了。(好像new也没有影响)
* post.setURI(new URI("http://xxxx"));然后重复上面的步奏就可以了。
*/

注意:post.addHeader("Accept-Encoding", "gzip, deflate, sdch");请注意不要添加这一项,也就是不要添加gzip压缩,否则去回来之后需要解压。