• HttpClient Get/Post方式调用Http接口


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

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

    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接口 "+getHttp(param1, param2));

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

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

  • 相关阅读:
    关于jqGrid组件数据显示不出问题
    jq修改导航栏样式(选中、使用两张图片替代的是否选中效果)
    jq获取图片并转换为base64
    jq怎么给图片绑定上传文件按钮
    ajax上传文件
    layui超链接追加tab选项卡必须手动刷新才出现问题
    thinkphp5中使用excel导出数据表格(包涵图片)
    关于php条形码生成(barcode),修改样式
    php中对象赋值问题
    数组小工具2
  • 原文地址:https://www.cnblogs.com/lhfyy/p/5407954.html
Copyright © 2020-2023  润新知