用HttpGet获取网页上的信息:
public void testGet(String url) throws ClientProtocolException, IOException {
// TODO Auto-generated constructor stub
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
if(response!=null)
{
HttpEntity entity = response.getEntity();
String strResult = EntityUtils.toString(entity,"UTF-8");
System.out.println(strResult);
EntityUtils.consume(entity);
}
httpget.abort();
}
其中HttpClient 类相当于是一个浏览器,先new一个浏览器
创建一个get方法,类似于在浏览器地址栏输入一个地址
httpclient.execute(httpget) 就是在用浏览器打开网页了,获得一个response结果,根据response可以获取很多信息,例如head,cookies等
下面就是输出网页的源码。
还有一种是用HttpPost获取网页上的信息:
要想用Post提交信息到网站上,首先要知道网站上需要什么信息。例如在 http://poj.org/submit 上
在谷歌浏览器上点F12,找Network,刷新一下就可以看到此时的网页数据包,登录后,找到一个数据包login,Headers 下的Form Data就是要提交的信息(在这把账号密码隐藏了),要实现自动登录,就得需要添加相应的信息
public void testPost() throws ClientProtocolException, IOException{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(loginUrl);
List <NameValuePair> nvp = new ArrayList<NameValuePair>();
nvp.add(new BasicNameValuePair("username", username));
nvp.add(new BasicNameValuePair("password", password));
String sCharSet = "GB2312";
httpost.setEntity(new UrlEncodedFormEntity(nvp,sCharSet));
HttpResponse response = httpclient.execute(httpost);
if(response!=null)
{
System.out.println(response.getFirstHeader("Location").getValue());
System.out.println(response.getStatusLine().getStatusCode());
}
httpost.abort();
}
NameValuePair 就是相应的键值对,提交的信息名和提交的信息内容,以List提交,有几个内容就添加几个。
其它与HttpGet类似。
这里的Location是跳转的链接。
response.getFirstHeader("Location").getValue()
StatusCode是响应状态码,302代表跳转
response.getStatusLine().getStatusCode()
因为用的HttpClient是4.2以上的版本,所以如果需要获取登录后的网页内容,只需要Post表单后,获取即可,不需要再像3.X版本获取Cookies值,这个版本登录后会自动记录登录信息。