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

preparation

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
package httpcall;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*Module: TestHTTPServer.java
*Description: 为了验证http接口的调用,编写了一个模拟的http接口
*Company:
*Author: ptp
*Date: Feb 22, 2012
*/

public class TestHTTPServer extends HttpServlet{

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("gbk");

PrintWriter out = response.getWriter();
String param1 = request.getParameter("param1");
out.println("param1=" + param1);
String param2 = request.getParameter("param2");
out.println("param2=" + param2);
if (param1 == null || "".equals("param1") || param1.length() <= 0) {
out.println("http call failed,参数param1不能为空,程序退出");
} else if (param2 == null || "".equals("param2")
|| param2.length() <= 0) {
out.println("http call failed,参数param2不能为空,程序退出");
} else {
out.println("---http call success---");
}
out.close();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}

 

HttpClientUtil.java的代码如下:

HttpClientUtil
package httpcall;

import java.io.IOException;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
//import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
//import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
//import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
*
*Module: HttpClientUtil.java
*Description: 以get/post的方式发送数据到指定的http接口---利用httpclient.jar包---HTTP接口的调用
*Company:
*Author: ptp
*Date: Feb 22, 2012
*/

public class HttpClientUtil {

private static final Log log = LogFactory
.getLog(HttpClientUtil.class);

/**
* get方式
* @param param1
* @param param2
* @return
*/
public static String getHttp(String param1,String param2){
String responseMsg = "";

// 1.构造HttpClient的实例
HttpClient httpClient = new HttpClient();

// 用于测试的http接口的url
String url="http://localhost:8080/UpDown/httpServer?param1="+param1+"&param2="+param2;

// 2.创建GetMethod的实例
GetMethod getMethod = new GetMethod(url);

// 使用系统系统的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());

try {
//3.执行getMethod,调用http接口
httpClient.executeMethod(getMethod);

//4.读取内容
byte[] responseBody = getMethod.getResponseBody();

//5.处理返回的内容
responseMsg = new String(responseBody);
log.info(responseMsg);

} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//6.释放连接
getMethod.releaseConnection();
}
return responseMsg;
}

/**
* post方式
* @param param1
* @param param2
* @return
*/
public static String postHttp(String param1,String param2) {
String responseMsg = "";

//1.构造HttpClient的实例
HttpClient httpClient=new HttpClient();

httpClient.getParams().setContentCharset("GBK");

String url="http://localhost:8080/UpDown/httpServer";

//2.构造PostMethod的实例
PostMethod postMethod=new PostMethod(url);

//3.把参数值放入到PostMethod对象中
//方式1:
/* NameValuePair[] data = { new NameValuePair("param1", param1),
new NameValuePair("param2", param2) };
postMethod.setRequestBody(data);*/

//方式2:
postMethod.addParameter("param1", param1);
postMethod.addParameter("param2", param2);

try {
// 4.执行postMethod,调用http接口
httpClient.executeMethod(postMethod);//200

//5.读取内容
responseMsg = postMethod.getResponseBodyAsString().trim();
log.info(responseMsg);

//6.处理返回的内容

} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//7.释放连接
postMethod.releaseConnection();
}
return responseMsg;
}

/**
* 测试的main方法
* @param args
*/
public static void main(String[] args) {

String param1="111";
String param2="222";
//get
// System.out.println("get方式调用http接口\n"+getHttp(param1, param2));

//post
System.out.println("post方式调用http接口\n"+postHttp(param1,param2));
}
}

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.释放连接

最新文章

  1. jesperreport+ireport简单理解
  2. jQuery Ajax(异步请求)
  3. ZT 第一范式,第二范式,第三范式
  4. Android gradle问题解决: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat
  5. Unity 坐标系
  6. 【CentOS】安装jdk
  7. Nginx使用webbench进行压力测试(转载)
  8. SpringMVC,MyBatis商品的增删改查
  9. 微软Azure云主机及blob存储的网络性能测试
  10. Windows redis集群搭建
  11. Android 多线程:使用Thread和Handler (从网络上获取图片)
  12. 愚公oracle数据库同步工具
  13. 我的Spring学习记录(五)
  14. TensorFlow + Keras 实战 YOLO v3 目标检测图文并茂教程
  15. DNS域名解析过程,域名的认识
  16. fail-fast和fail-safe的区别
  17. 一个用于分页的page类
  18. Windows7 (Win7) 配置Windows Update 时失败 正在还原更改
  19. DbProviderFactory
  20. Net-Snmp工具(学习SNMP的工具,开源项目)简单使用

热门文章

  1. bootstrap学习
  2. cookie欺骗
  3. 安卓界面控件屏幕居中Layout例子
  4. Ubuntu16.04+Tensorlow+caffe+opencv3.1+theano部署
  5. IOS开发UI基础学习-------总结
  6. Android 贝塞尔曲线库
  7. &lt;&lt;软技能,代码之外的生存技能&gt;&gt;读书笔记
  8. PHP购物车类
  9. 【学】ECMA6的新特性1
  10. json对象数组按对象属性排序