HTTPClient系统学习

本文介绍了HTTPClient在Java中的使用,包括HTTP协议的主要方法、自动转向支持、HTTPS协议及代理服务器处理。通过六个步骤展示了HttpClient的使用流程,并讨论了字符编码、自动转向问题及其解决方法。还提及了HttpClient在调用webservice服务中的应用和常见问题,如处理301、302重定向及相对URL的解析。
摘要由CSDN通过智能技术生成

HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源。
HTTPClient提供的主要功能:

1、实现了所有HTTP的方法(GET、POST、等PUT、HEAD);
2、支持自动转向;
3、支持HTTPS协议;
4、支持代理服务器等。

使用HttpClient需要以下6个步骤:

  1. 创建HttpClient的实例
  2. 创建某种连接方法的实例,GetMethod/PostMethod。在 GetMethod/PostMethod的构造函数中传入待连接的地址
  3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
  4. 读response
  5. 释放连接。无论执行方法是否成功,都必须释放连接
  6. 对得到后的内容进行处理

HTTP GET方法应用:
应用一:

String url = "";
//构造HttpClient实例
HttpClient httpClient = new HttpClient();
//创建Get方法实例
GetMethod getMethod = new GetMethod(url);
//使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
        new DefaultHttpMethodRetryHandler( ));
try{
    int statusCode = httpClient.executeMethod(getMethod);
    if (statusCode == HttpStatus.SC_OK) {
        //方法一:
        byte[] respByte = getMethod.getResponseBody();
        logger.info("返回信息:" + new String(respByte));
        //方法二:
        String respStr = getMethod.getResponseBodyAsString();
        logger.info("返回信息:" + respStr);
    }
    logger.error("Method failed: "+ getMethod.getStatusLine());

}catch(HttpException e){
    logger.error("发生致命的异常,可能是协议不对或者返回的内容有问题",e);
}catch(IOException e){
    logger.error("网络异常",e);
}finally{
    //释放连接
    getMethod.releaseConnection();
}

应用二:

public String getRequest(String url, String requestStr) {
    logger.debug("the getRest'params : url = " + "http://" + url + "?" + requestStr);   
    String respStr = null;
    try { 
            // 定义HttpClient 
            DefaultHttpClient client = new DefaultHttpClient(); 
            // 实例化HTTP方法 
            HttpGet request = new HttpGet();
            url =  url + "?" + requestStr;
            url = URLEncoder.encode(url, "UTF-8");
            request.setURI(new URI("http://" + url)); 
            HttpResponse response = client.execute(request); 
            logger.debug("response status : " + response.getStatusLine().getStatusCode());
            /**请求发送成功,并得到响应**/
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                /**读取服务器返回过来的数据**/
                respStr = EntityUtils.toString(response.getEntity());
            } else {
                logger.error("get request fail:" + url);
            }
    }catch(Exception e){
             logger.error("get request fail:" + url, e); 
        }
    return respStr;
}

HTTP POST方法应用:
POST方法用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列(Request-Line)中请求URI所指定资源的附加新子项。
应用一:

String url = "";
String requestStr = "";
//创建HttpClient实例
HttpClient httpClient = new HttpClient();
//创建Post方法实例
PostMethod postMethod = new PostMethod(url);

//******方法一:创建请求实体,发送请求start*************
byte[] b = requestStr.getBytes();
InputStream is = new ByteArrayInputStream(b, 0, b.length);
RequestEntity re = new InputStreamRequestEntity(is, b.length, "text/xml; charset=UTF-8");//GBK
//设置请求头
postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
//设置请求体
postMethod.setRequestEntity(re);
//******创建请求实体,发送请求end*************

//******方法二:创建请求体,发送请求start*************
// 构造名称值对节点类对象
NameValuePair[] data = {
        new NameValuePair("id", "yourUserName"),
        new NameValuePair("passwd", "yourPwd"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值