【HttpClient】使用HttpClient连接网站

这一篇文章讲解如何使用HttpClient来请求Web数据。正如我们平时使用浏览器一样,我们在地址栏输入网址,而浏览器就会跳转呈现给我们网站的内容,那是因为,网站获取到这个网页的html源代码,然后通过调用内核进行UI显示,然后我们就可以看到整个网页的内容了,而不是html代码,而我们这里使用HttpClient请求webpage得到的是html源代码,而不是UI图像(这应该是得不到的,而是要自己处理的,所以各种浏览器之间的呈现效果略有不同)。

那么,正如我们在《计算机网络》课程中学习到的一样,虽然Http请求有6种方式,但是也就用到4种(还记得是什么吗?GET、POST、HEAD、PUT),而常用的也就两种(GET和POST),因此我这里也就接受这两种,也希望抛砖引玉,大家在使用到其他方法的时候能从这两种常用的方法中得到一个启示,从而可以轻松得上手,这也许是我学习的方式,不知道大家赞同不?

首先,那么先进行准备工作,jar包是少不了的,这个网站很有用,希望大家能够多多阅览,

http://apache.org/

HTTPClient也是其中的一个子项目,所以大家可以从apache主页上找,也可以从这个地址上找

http://hc.apache.org/(左边导航栏有HttpClient(GA))

下载下来以后,我们就创建一个"java项目", 名字就取"HttpClient`好了,然后创建一个Main类,我们就从这里开始,当然,别忘记了导入jar包GET请求 先说明一下,使用HttpClient请求的方法不止一种,至少我知道的就不止一种了,这里我介绍的我认为比较容易被大家接受的一种。

步骤:

那么,下面就给出代码:

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.protocol.HttpService;

public class Main
{
     public static void main(String[] args) throws ClientProtocolException, IOException
     {
         //使用HttpClient构建一个浏览器
         HttpClient client = new DefaultHttpClient();
         //使用URL构建一个请求方法实例,注意这里是GET方式
         String uri = http://www.baidu.com;
         HttpGet httpGet = new HttpGet(uri);
         //浏览器打开请求方法实例,并且获得Response
         HttpResponse response = client.execute(httpGet);
         //获取reponse内容,这里略复杂,主要是response中还包含请求头等信息
         HttpEntity entity;
         byte[] buffer = new byte[1024];
         int length;
         if((entity = response.getEntity()) != null)
         {
             BufferedInputStream bis = new BufferedInputStream(entity.getContent());
             while((length = bis.read(buffer)) != -1)
             {
                 //直接打印得到的实体
                 System.out.println(new String(buffer, 0, length));
             }
         }
         //关闭浏览器
         client.getConnectionManager().shutdown();
     }
}


执行这段代码,将会得到以下结果

<!doctype html><html><head>.....
</html>


你可以将以上代码复制到记事本中,然后保存文件名为"baidu.html"到桌面,然后使用浏览器打开,你会发现这就是百度的首页了。

POST请求

post 请求其实和 get 请求一样,不过是构建的请求方法实例不同而已,POST 请求方法实例是 HttpPost,这个类能够把一个 URL 自动得处理,然后使用 POST 的方式提交,而我们只需要向构建HttpGet一样使用它就可以了,如下

public static void main(String[] args) throws ClientProtocolException, IOException
{
    //使用HttpClient构建一个浏览器
    HttpClient client = new DefaultHttpClient();
    //使用URL构建一个请求方法实例,注意这里是POST方式
    HttpPost post = new HttpPost(https://api.weibo.com/oauth2/access_token?client_ +
                                id=730776687&client_secret=00000000000000000000000000000000&grant_type +
                                =authorization_code&redirect_uri=http://www.liuliqiang.cn&code=7c65219 +
                                839dee8debd32cdaa81ffe816);
    //浏览器打开请求方法实例,并且获得Response
    HttpResponse response = client.execute(post);
    //获取reponse内容,这里略复杂,主要是response中还包含请求头等信息
    HttpEntity entity;
    byte[] buffer = new byte[1024];
    int length;
    if((entity = response.getEntity()) != null)
    {
        BufferedInputStream bis = new BufferedInputStream(entity.getContent());
        while((length = bis.read(buffer)) != -1)
        {
            //直接打印得到的实体
            System.out.println(new String(buffer, 0, length));
        }
    }
    //关闭浏览器
    client.getConnectionManager().shutdown();
}


需要注意的是,最后的关闭浏览器步骤不要忘记了哦,正常情况下不会有什么问题,但是如果服务器设置不理想的话,不关闭会导致一些大问题。。

这个是微博接口的,得到的以下结果,

{access_token:2.00000000000000000000000,remind_in:179473,expires_in:179473,uid:2107671612`}


好,这个应该算是完结了,如果大家还有不理解,可以查看官方文档,或者访问官方网站,我已经下载了官方的说明文档,你可以点击这里下载

[http://vdisk.weibo.com/s/oB8va

target=

_blank

在新窗口打开下载](<pre)

[http://hc.apache.org/

target=

_blank

在新窗口访问官方](<pre)