zoukankan      html  css  js  c++  java
  • httpClient使用总结

    前记

          最近有个需求,需要根据商品id获取商品详情: 首先想到的是在浏览器里输入url按回车就可以了;或者在linux中使用curl+url来发起一个http请求; 但如果是要在java程序中发出http请求,该如何实现呢?  

    一. httpClient初认识

          虽然JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。

          HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包。

    二.  httpClient使用

     1. 引入maven依赖

        

    1. <dependency>  
    2.   <groupId>org.apache.httpcomponents</groupId>  
    3.   <artifactId>httpcomponents-client</artifactId>  
    4.   <version>4.3</version>  
    5. </dependency>  

     2. GET方法代码框架 

    1. import java.io.IOException;  
    2. import org.apache.commons.httpclient.*;  
    3. import org.apache.commons.httpclient.methods.GetMethod;  
    4. import org.apache.commons.httpclient.params.HttpMethodParams;  
    5. public class GetSample{  
    6.   public static void main(String[] args) {  
    7.   //step1: 构造HttpClient的实例,类似于打开浏览器  
    8.   HttpClient httpClient = new HttpClient();  
    9.   //step2: 创建GET方法的实例,类似于在浏览器地址栏输入url  
    10.   GetMethod getMethod = new GetMethod("http://www.ibm.com");  
    11.   // 使用系统提供的默认的恢复策略  
    12.   getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
    13.     new DefaultHttpMethodRetryHandler());  
    14.   try {  
    15.    //step3: 执行getMethod 类似于点击enter,让浏览器发出请求  
    16.    int statusCode = httpClient.executeMethod(getMethod);  
    17.    if (statusCode != HttpStatus.SC_OK) {  
    18.     System.err.println("Method failed: "  
    19.       + getMethod.getStatusLine());  
    20.    }  
    21.    //step4: 读取内容,浏览器返回结果  
    22.    byte[] responseBody = getMethod.getResponseBody();  
    23.    //处理内容  
    24.    System.out.println(new String(responseBody));  
    25.   } catch (HttpException e) {  
    26.    //发生致命的异常,可能是协议不对或者返回的内容有问题  
    27.    System.out.println("Please check your provided http address!");  
    28.    e.printStackTrace();  
    29.   } catch (IOException e) {  
    30.    //发生网络异常  
    31.    e.printStackTrace();  
    32.   } finally {  
    33.    //释放连接 (一定要记住)  
    34.    getMethod.releaseConnection();  
    35.   }  
    36.  }  
    37. }  


    遇到的异常

       org.apache.commons.httpclient.ProtocolException:The server x.x.x.x failed to respond with a valid HTTP response
       java.net.SocketException:Connection reset
       java.lang.IllegalStateException:Connection is not open
       java.io.IOException: Stream closed


    java.net包里定义的异常摘录

    BindException:试图将套接字绑定到本地地址和端口时发生错误的情况下,抛出此异常。 

                                      例如,当web应用已经启动,8080端口已经占用,再打算启动时会报该异常

    ConnectException:试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。

                                        远程地址和端口而上一个异常是本地地址和端口

    HttpRetryException:抛出此异常指示 HTTP 请求需要重试,但由于启用了流模式而无法自动重试

    ProtocolException:抛出此异常指示在底层协议中存在错误,如 TCP 错误

    SocketException:抛出此异常指示在底层协议中存在错误,如 TCP 错误

    SocketTimeoutException:如果在读取或接受套接字时发生超时,则抛出此异常

    MalformedURLException:抛出这一异常指示出现了错误的 URL。


    参考资料

     官方文档:http://hc.apache.org/httpcomponents-client-4.2.x/index.html
     http://www.ibm.com/developerworks/cn/opensource/os-httpclient/ 
     http://laohuang.iteye.com/blog/55613

  • 相关阅读:
    BADI 笔记
    ALV 常用功能 转载
    F4字段搜索帮助
    全省各地均可拨打劳动违法投诉电话:12333
    小结SQL Server连接失败错误及解决
    sql server日志已满处理方法
    VC6.0快捷键大全
    Eclipse下UML插件及安装
    Delphi错误:"External exception C0000235"
    delphi中临界操作方法
  • 原文地址:https://www.cnblogs.com/jpfss/p/9083284.html
Copyright © 2011-2022 走看看