发送http请求-Apache HttpClient

5 篇文章 0 订阅

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

 

本节摘要:本节主要分别介绍如何用get方式、post方式向http接口发送数据。

使用HttpClient发送请求的一般步骤 

(1) 创建HttpClient对象。 

(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。 

(3) 如果需要发送请求参数,可调用HttpGet同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,可调用setEntity(HttpEntity entity)方法来设置请求参数。 

(4) 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。 

(5) 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。 

(6) 释放连接。无论执行方法是否成功,都必须释放连接

 

 

 

preparation

1. 项目环境如下:

myeclipse6.5 、tomcat5.0、system:xp、JDK:开发1.5,编译1.4

为了方便,在原来的web项目UpDown中新建了一个httpcall包,用来保存http接口和调用的客户端。

5

 

2.准备需要的jar包

* commons-httpclient-3.0.jar 
* commons-logging.jar 
* commons-codec-1.3.jar

 

3.class&method

HttpClient:

GetMethod:

PostMethod:

 

start

接口写了一个servlet来接收客户端get/post的请求

web.xml需要加入以下配置:

<!-- 模拟HTTP的调用,写的一个http接口 --> 
    <servlet> 
        <servlet-name>TestHTTPServer</servlet-name> 
        <servlet-class>httpcall.TestHTTPServer</servlet-class> 
    </servlet> 
    <servlet-mapping> 
        <servlet-name>TestHTTPServer</servlet-name> 
        <url-pattern>/httpServer</url-pattern> 
    </servlet-mapping>

 

TestHTTPServer.java的代码如下:

 1 package httpcall;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  *Module:       TestHTTPServer.java
12  *Description:  为了验证http接口的调用,编写了一个模拟的http接口
13  *Company:      
14  *Author:       ptp
15  *Date:         Feb 22, 2012
16  */
17 
18 public class TestHTTPServer  extends HttpServlet{
19     
20     private static final long serialVersionUID = 1L;
21 
22     public void doGet(HttpServletRequest request, HttpServletResponse response)
23             throws ServletException, IOException {
24         response.setCharacterEncoding("gbk");
25 
26         PrintWriter out = response.getWriter();
27         String param1 = request.getParameter("param1");
28         out.println("param1=" + param1);
29         String param2 = request.getParameter("param2");
30         out.println("param2=" + param2);
31         if (param1 == null || "".equals("param1") || param1.length() <= 0) {
32             out.println("http call failed,参数param1不能为空,程序退出");
33         } else if (param2 == null || "".equals("param2")
34                 || param2.length() <= 0) {
35             out.println("http call failed,参数param2不能为空,程序退出");
36         } else {
37             out.println("---http call success---");
38         }
39         out.close();
40     }
41 
42     public void doPost(HttpServletRequest request, HttpServletResponse response)
43             throws ServletException, IOException {
44         this.doGet(request, response);
45     }
46 }

 

HttpClientUtil.java的代码如下:

  1 package httpcall;
  2 
  3 import java.io.IOException;
  4 import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
  5 //import org.apache.commons.httpclient.Header;
  6 import org.apache.commons.httpclient.HttpClient;
  7 import org.apache.commons.httpclient.HttpException;
  8 //import org.apache.commons.httpclient.HttpStatus;
  9 import org.apache.commons.httpclient.methods.GetMethod;
 10 import org.apache.commons.httpclient.methods.PostMethod;
 11 import org.apache.commons.httpclient.params.HttpMethodParams;
 12 //import org.apache.commons.httpclient.NameValuePair;
 13 import org.apache.commons.logging.Log;
 14 import org.apache.commons.logging.LogFactory;
 15 
 16 /**
 17  * 
 18  *Module:       HttpClientUtil.java
 19  *Description:  以get/post的方式发送数据到指定的http接口---利用httpclient.jar包---HTTP接口的调用
 20  *Company:      
 21  *Author:       ptp
 22  *Date:         Feb 22, 2012
 23  */
 24 
 25 public class HttpClientUtil {
 26     
 27     private static final Log log = LogFactory
 28     .getLog(HttpClientUtil.class);
 29 
 30     /**
 31      * get方式
 32      * @param param1
 33      * @param param2
 34      * @return
 35 */
 36     public static String getHttp(String param1,String param2){
 37         String responseMsg = "";
 38 
 39         // 1.构造HttpClient的实例
 40         HttpClient httpClient = new HttpClient();
 41 
 42         // 用于测试的http接口的url
 43         String url="http://localhost:8080/UpDown/httpServer?param1="+param1+"&param2="+param2;
 44 
 45         // 2.创建GetMethod的实例
 46         GetMethod getMethod = new GetMethod(url);
 47 
 48         // 使用系统系统的默认的恢复策略
 49         getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
 50                 new DefaultHttpMethodRetryHandler());
 51         
 52         try {
 53             //3.执行getMethod,调用http接口
 54             httpClient.executeMethod(getMethod);
 55 
 56             //4.读取内容
 57             byte[] responseBody = getMethod.getResponseBody();
 58             
 59             //5.处理返回的内容
 60             responseMsg = new String(responseBody);
 61             log.info(responseMsg);
 62             
 63         } catch (HttpException e) {
 64             e.printStackTrace();
 65         } catch (IOException e) {
 66             e.printStackTrace();
 67         }finally{
 68             //6.释放连接
 69             getMethod.releaseConnection();
 70         }
 71         return responseMsg;
 72     }
 73 
 74     /**
 75      * post方式 
 76      * @param param1 
 77      * @param param2
 78      * @return
 79 */
 80     public static String postHttp(String param1,String param2) {
 81         String responseMsg = "";
 82         
 83         //1.构造HttpClient的实例
 84         HttpClient httpClient=new HttpClient();
 85         
 86         httpClient.getParams().setContentCharset("GBK");
 87         
 88         String url="http://localhost:8080/UpDown/httpServer";
 89         
 90         //2.构造PostMethod的实例
 91         PostMethod postMethod=new PostMethod(url);
 92         
 93         //3.把参数值放入到PostMethod对象中
 94 //方式1:
 95 /*        NameValuePair[] data = { new NameValuePair("param1", param1),
 96                 new NameValuePair("param2", param2) };
 97         postMethod.setRequestBody(data);*/
 98         
 99         //方式2:    
100         postMethod.addParameter("param1", param1);
101         postMethod.addParameter("param2", param2);
102         
103         
104         try {
105             // 4.执行postMethod,调用http接口
106             httpClient.executeMethod(postMethod);//200
107             
108 //5.读取内容
109             responseMsg = postMethod.getResponseBodyAsString().trim();
110             log.info(responseMsg);
111             
112             //6.处理返回的内容
113 
114         } catch (HttpException e) {
115             e.printStackTrace();
116         } catch (IOException e) {
117             e.printStackTrace();
118         } finally {
119             //7.释放连接
120             postMethod.releaseConnection();
121         }
122         return responseMsg;
123     }
124 
125     /**
126      * 测试的main方法
127      * @param args
128 */
129     public static void main(String[] args) {
130     
131         String param1="111";
132         String param2="222";
133         //get
134 //        System.out.println("get方式调用http接口\n"+getHttp(param1, param2));
135         
136 //post
137         System.out.println("post方式调用http接口\n"+postHttp(param1,param2));
138     }
139 }

 

result

在HttpClientUtil运行main方法,分别运行以下几种情况:

1.get方式

设置

String param1="111"; 
String param2="222";

运行get方式,截图如下:

1

 

设置

String param1="111"; 
String param2="";

运行get方式,截图如下:

2

 

2.post方式

设置

String param1="111"; 
String param2="222";

运行post方式,截图如下:

3

 

设置

String param1="111"; 
String param2="";

运行post方式,截图如下:

4

 

通过get和post方式调用http接口,总结如下:

* get方式调用http接口的步骤: 
* 1.构造HttpClient实例 
* 2.构造GetMethod实例 
* 3.执行getMethod,调用http接口 
* 4.读取内容 
* 5.处理返回的内容 
* 6.释放连接 

* post方式调用http接口的步骤: 
* 1.构造HttpClient实例 
* 2.构造PostMethod实例 
* 3.把参数值放入到PostMethod对象中 
*   方式1:利用NameValuePair类 
*   方式2:直接用PostMethod实例对象的addParameter方法 
* 4.执行postMethod,调用http接口 
* 5.读取内容 
* 6.处理返回的内容 
* 7.释放连接

 

 

 

参考资料:

原文链接:

get/post方式调用http接口

https://www.cnblogs.com/java-pan/archive/2012/02/26/httpclient-post-get.html

 

HttpClient详细使用示例

https://blog.csdn.net/justry_deng/article/details/81042379

 

HTTPClient和CloseableHttpClient

https://blog.csdn.net/q394895302/article/details/90256482

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值