HttpClient Get/Post方式调用Http接口

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接口\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方式,截图如下:

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

posted on 2016-04-19 14:00 牧少 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lhfyy/p/5407954.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python对Excel的操作 xlrd、xlwt包详解

文章更新中............. python中对Excel表格的操作&#xff0c;主要用到两个包&#xff0c;分别是xlrd和xlwt 1.xlrd主要用于读Excel表 2.xlwt则主要用于写Excel python—xlrd 这里我先准备了一些济南天气的一些数据通过python程序先对数据有一个基本的了解&#xff1a; path…

人造细胞能模仿天然细胞感知环境

来源&#xff1a;科技日报据英国帝国理工学院官网近日消息&#xff0c;该校一个研究团队成功开发出一种新型人造细胞&#xff0c;能够模仿天然细胞感知环境中的化学变化并产生反应。如果在未来发展成熟&#xff0c;这项技术可广泛用于生物科技等领域。相关成果已刊登在近期美国…

FileNotFoundError: [Errno 2] No such file or directory: 'test/条形图03.html'

这几天一直在搞百度的一个可视化的工具Echart&#xff0c;感觉确实挺不错的&#xff0c;比matplotlib的可视化好看多了。 今天遇到了两个问题 1、如何导入pyecharts中的get_all_options工具 解决方法&#xff1a; from pyecharts.echarts.option import get_all_options 2、在进…

感觉皮层实质性参与工作记忆的信息保存

来源&#xff1a;脑智卓越创新中心7月17日&#xff0c;《eLife》期刊在线发表了题为《感觉皮层实质性参与工作记忆的信息保存》的研究论文。该研究由中国科学院脑科学与智能技术卓越创新中心&#xff08;神经科学研究所&#xff09;、上海脑科学与类脑研究中心、神经科学国家重…

孙正义看科技未来:今后30年要把钱和精力投向哪里

来源&#xff1a;dang归网孙正义&#xff0c;软银集团创办人对于今后30年来讲&#xff0c;我认为现在个很关键的时刻&#xff0c;尤其是在各位的人生当中。而且现在是一整个概念的转变&#xff0c;我们要包容这个概念的转变&#xff0c;我想先给大家看两张照片。这是美国纽约的…

python+OpenCV图像处理(一)读取、复制、显示、保存

前 言 从2017年入坑人工智能领域开始&#xff0c;就被这一领域深深的所吸引&#xff0c;虽然到现在已经踩了不少坑&#xff0c;但总算有了不少的收获&#xff0c;深感不虚此行&#xff0c;借助强大的python让我快速的向着这一领域靠近&#xff0c;现在流行比较广的人工智能应用…

python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离

图像像素的访问、通道的合并与分离 &#xff08;一&#xff09;像素访问 在第一篇博客中&#xff0c;向大家介绍了&#xff0c;所谓的图像在计算机看来就是一个矩阵&#xff0c;对于RGB图像矩阵一共有三层&#xff0c;分别代表着RGB通道&#xff0c;矩阵中每一个数的大小代表着…

PNG转EPS格式

由于使用LaTeX需要将png格式转为eps格式&#xff0c;如果电脑装了tex软件&#xff0c;则转换方式很简单&#xff1a; 首先打开需要转换的图片所在文件夹。在地址栏输入cmd&#xff1a; 此时会弹出&#xff0c;命令窗口&#xff0c;然后输入bmeps -c Figure1.png Figure1.eps 即…

工业根基,莫让ICT喧宾夺主

来源&#xff1a;英诺维盛公司新工业革命正在得到广泛的关注&#xff0c;而ICT则获得了更高的曝光率和话语权。ICT是信息、通信和技术三个英文词首字母组合&#xff08;Information Communications Technology&#xff09;。显然&#xff0c;ICT是新工业革命必不可少的“新工业…

python+OpenCV图像处理(三)绘制简单的几何图形、显示文字

绘制简单的几何图形、显示文字 &#xff08;一&#xff09;绘制直线和矩形 img np.zeros([512, 512, 3]) # line函数用来画直线&#xff0c;第一个参数可以理解为画布矩阵&#xff0c; # 第二个参数pt1是直线的起始位置&#xff0c;第三个参数pt2是直线的终止位置&#xff0c;…

信息转换原理: 信息、知识、智能的一体化理论

来源&#xff1a;人机与认知实验室【数据、信息、知识、智能除了转换外&#xff0c;是否还有变异、弥聚等&#xff1f;能否把这些变化看成是态、势、感、知结构扭曲而产生的必然现象&#xff1f;】摘要 如何把信息转换为解决问题所需要的智能,是信息科学领域的核心研究课题. 本…

MATLAB(一)Matlab“帮助”的使用

前言MATLAB是matrix和laboratory两个词的组合&#xff0c;意为矩阵工厂&#xff08;矩阵实验室&#xff09;。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真…

javascript 学习笔记(一)

说明&#xff1a;从今天开始从基础抓起学习javascript-完全依据w3school(http://www.w3school.com.cn/js/js_intro.asp)网站顺序。这里我将我认为不好理解的地方积累下来&#xff0c;希望对像我一样的新手有益。 第一篇 JavaScript&#xff1a;写入 HTML 输出 1. javascript有…

[附下载]英特尔中国研究院携手生态伙伴发布《机器人4.0白皮书》

来源&#xff1a;硬蛋迈向云-边-端融合的机器人4.0时代在2019国际人工智能与机器人创新生态峰会上&#xff0c;英特尔中国研究院院长宋继强博士发表了题为《迈向云-边-端融合的机器人4.0时代》的主题演讲。宋院长分析了机器人行业的现状与发展趋势&#xff0c;提出了基于AI、5G…

MATLAB(二)数据的输入

数据的输入 &#xff08;一&#xff09;简单矩阵的输入 1.要直接输入矩阵时&#xff0c;矩阵一行中的元素用空格或逗号分隔&#xff1b;矩阵行与行之间用分号“&#xff1b;”隔离&#xff0c;整个矩阵放在“[ ]”里。 >> a [1, 2, 3, 4;5, 6, 7, 8] a 1 2 3 …

无人驾驶产业的国际比较和PEST分析

来源&#xff1a;智造智库【导读】国家新一代人工智能发展规划中明确提出&#xff0c;发展自动驾驶汽车和轨道交通系统&#xff0c;加强车载感知、自动驾驶、车联网、物联网等技术集成和配套&#xff0c;开发交通智能感知系统&#xff0c;形成我国自主的自动驾驶平台技术体系和…

人类正在进入超级智能时代,论一种新超级智能的崛起

本文发表在2019年7月30号《社会科学报》&#xff0c;是刘锋根据2019年7月出版的著作《崛起的超级智能&#xff1a;互联网大脑》核心内容撰写的一篇文章&#xff0c;也感谢刘慈欣&#xff0c;张亚勤&#xff0c;周鸿祎&#xff0c;王飞跃&#xff0c;约翰.翰兹等专家和好友推荐。…

有道翻译接口问题

博文更新&#xff1a; 更新地址&#xff1a;https://blog.csdn.net/qq_40962368/article/details/89053068 原博文&#xff1a; 在调用有道翻译api接口时&#xff0c;出现了如下错误&#xff1a; 您要翻译的内容是&#xff1a;english Traceback (most recent call last):F…

GE前董事长伊梅尔特谈数字化转型:制造企业这件事做不好,一定没出路

来源&#xff1a;《商业评论》2019年7月号&#xff1b;两位作者&#xff1a;GE前董事长兼CEO杰弗里伊梅尔特&#xff1b;GE第一位常驻教授维贾伊戈文达拉扬无论过去还是现在&#xff0c;企业要实现任何转型都不容易。制造企业想实施数字化转型&#xff1f;这比实施其他任何一种…

MATALB(三)绘图命令

绘图命令 &#xff08;一&#xff09;二维绘图命令 二维绘图的基本命令有plot&#xff0c;loglog&#xff0c;semilogx&#xff0c;semilogy和polar。它们的使用方法基本相同&#xff0c;其不同点是在不同的坐标中绘制图形。plot命令使用线性坐标空间绘制图形&#xff1b;loglo…