如何用get方式、post方式向http接口发送数据

http://www.ixueyun.com/community/thread-6116-1-1.html

1. 项目环境如下:

myeclipse6.5 、tomcat5.0、system:xp、JDK:开发1.5,编译1.4
为了方便,在原来的web项目UpDown中新建了一个httpcall包,用来保存http接口和调用的客户端。




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的代码如下:

TestHTTPServer 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的代码如下:
HttpClientUtil   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方式,截图如下:


设置
String param1="111";
String param2="";
运行get方式,截图如下:


2.post方式
设置
String param1="111";
String param2="222";
运行post方式,截图如下:


设置
String param1="111";
String param2="";
运行post方式,截图如下:


通过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.释放连接
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值