Java HttpClient 实现自动登录与获取网页信息

用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值,这个版本登录后会自动记录登录信息。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值