HttpClient

HttpClient

 HTTP协议可以说是现在Internet上面最重要,使用最多的协议之一了,越来越多的java应用程序需要使用http协议来访问网络资源,特别是现在rest api的流行

类名

作用

HttpClient

HttpClient代表了一个http的客户端,HttpClient接口定义了大多数基本的http请求执行行为.

HttpEntity

entity是发送或者接收消息的载体。entities 可以通过request和response获取到.

HttpConnection

HttpConnection代表了一个http连接。

(1) GET方法
使用 HttpClient 需要以下 6 个步骤:

        1.创建 HttpClient 的实例

                HttpClient httpClient = new DefaultHttpClient();//默认方法
                //也可使用下面的方法
                CloseableHttpClient httpClient = HttpClients.createDefault();

        2.创建某种连接方法的实例,在这里是GetMethod。在 GetMethod 的构造函数中传入待连接的地址

                GetMethod getMethod = new GetMethod("…");

        3.调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

                int statusCode = httpClient.executeMethod(getMethod);

        4.读 response

                byte[] responseBody = getMethod .getResponseBody();

        5.释放连接。无论执行方法是否成功,都必须释放连接

                 getMethod .releaseConnection();

        6. 对得到后的内容进行处理

                 System.out. println(new String(responseBody));

例子1:

//创建默认的httpClient实例.

HttpClient httpclient = new DefaultHttpClient();

try {

//创建httpget.

   HttpGet httpget = new HttpGet("http://www.baidu.com/");

System.out.println("executing request " + httpget.getURI());

//执行get请求.

   HttpResponse response = httpclient.execute(httpget);

//获取响应实体

   HttpEntity entity = response.getEntity();

System.out.println("--------------------------------------");

//打印响应状态

   System.out.println(response.getStatusLine());

      if (entity != null) {

//打印响应内容长度

          System.out.println("Response content length: " + entity.getContentLength());

//打印响应内容

         System.out.println("Response content: " + EntityUtils.toString(entity));

            }

        System.out.println("------------------------------------");

        } finally {

            //关闭连接,释放资源

            httpclient.getConnectionManager().shutdown();

        }

例子2:

public class GetSample{

public static void main(String[] args) {

//构造HttpClient的实例

HttpClient httpClient = new DefaultHttpClient();

//创建GET方法的实例

GetMethod getMethod = new GetMethod("...");

//使用系统提供的默认的恢复策略

getMethod.getParams().setParameter( HttpMethodParams.RETRY_HANDLER,

new DefaultHttpMethodRetryHandler( ));

try {

//执行getMethod

int statusCode = httpClient.executeMethod(getMethod);

if (statusCode != HttpStatus. SC_OK) {

System.err.println("Method failed: "

+ getMethod.getStatusLine());

}

//读取内容

byte[] responseBody = getMethod.getResponseBody();

//处理内容

System.out.println (new String(responseBody));

} catch (HttpException e) {

//发生致命的异常,可能是协议不对或者返回的内容有问题

System.out.println("Please check your provided http address!");

e.printStackTrace();

} catch (IOException e) {

//发生网络异常

e.printStackTrace();

} finally {

//释放连接

getMethod.releaseConnection();

}

}

}

(2)POST方法:POST方法用来向目的服务器发出请求

构造PostMethod之前的步骤都相同,与GetMethod一样,构造PostMethod也需要一个URI参数。在创建了PostMethod的实例之后,需要给method实例填充表单的值,在BBS的登录表单中需要有两个域,第一个是用户名(域名叫id),第二个是密码(域名叫passwd)。表单中的域用类NameValuePair来表示,该类的构造函数第一个参数是域名,第二参数是该域的值;将表单所有的值设置到PostMethod中用方法setRequestBody。另外由于BBS登录成功后会转向另外一个页面,但是HttpClient对于要求接受后继服务的请求,比如POST和PUT,不支持自动转发,因此需要自己对页面转向做处理。

String url = "....";

PostMethod postMethod = new PostMethod(url);

// 填入各个表单域的值

NameValuePair[] data = { new NameValuePair("id", "yourUserName"),

new NameValuePair("passwd", "yourPwd") };

// 将表单的值放入postMethod中

postMethod.setRequestBody(data);

// 执行postMethod

int statusCode = httpClient.executeMethod(postMethod);

// HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发

// 301或者302

if (statusCode == HttpStatus SC_MOVED_PERMANENTLY ||

statusCode == HttpStatus SC_MOVED_TEMPORARILY) {

// 从头中取出转向的地址

Header locationHeader = postMethod.getResponseHeader("location");

String location = null;

if (locationHeader != null) {

location = locationHeader.getValue();

System.out.println("The page was redirected to:" + location);

} else {

System.err.println("Location field value is null.");

}

return;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值