两种访问接口的方式(get和post)
跨机器、跨语言的远程访问形式一共有三种:scoket发送数据包、http发送请求、rmi远程连接;
http发送请求方式;分为post和get两种方式
- importjava.io.IOException;
- importjava.io.InputStream;
- import java.util.Map;
- importjava.util.concurrent.atomic.AtomicInteger;
- importorg.apache.commons.httpclient.HttpClient;
- importorg.apache.commons.httpclient.HttpException;
- importorg.apache.commons.httpclient.HttpStatus;
- importorg.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
- importorg.apache.commons.httpclient.NameValuePair;
- importorg.apache.commons.httpclient.methods.GetMethod;
- importorg.apache.commons.httpclient.methods.PostMethod;
- importorg.apache.commons.httpclient.params.HttpConnectionManagerParams;
- importorg.apache.commons.io.IOUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- publicclass SendHttpUrl {
- privatefinalstatic Logger logger = LoggerFactory.getLogger(SendHttpUrl.class);
- privatestatic HttpClient httpClient = null;
- privatestaticMultiThreadedHttpConnectionManager connectionManager = null;// 多线程管理器
- privateintmaxThreadsTotal = 128;// 最大线程数
- privateintmaxThreadsPerHost = 32; // 分配给每个客户端的最大线程数
- privateintconnectionTimeout = 15000;// 连接超时时间,毫秒
- privateintsoTimeout = 14000;// 读取数据超时时间,毫秒
- publicvoid init() {
- connectionManager = newMultiThreadedHttpConnectionManager();
- HttpConnectionManagerParams params = newHttpConnectionManagerParams();
- params.setConnectionTimeout(connectionTimeout);
- params.setMaxTotalConnections(maxThreadsTotal);
- params.setSoTimeout(soTimeout);
- if (maxThreadsTotal > maxThreadsPerHost) {
- params.setDefaultMaxConnectionsPerHost(maxThreadsPerHost);
- } else {
- params.setDefaultMaxConnectionsPerHost(maxThreadsTotal);
- }
- connectionManager.setParams(params);
- httpClient = new HttpClient(connectionManager);
- httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
- httpClient.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);
- }
- /**
- * get方式访问
- *
- * @param url
- * @param callType
- * @param parmMap
- * @return
- */
- private String callByGet(Stringurl, String callType, Map<String, String> parmMap) {
- if (logger.isDebugEnabled()){
- logger.debug("in get,url:" + url);
- }
- GetMethod getMethod = new GetMethod(url);
- int statusCode = 0;
- try {
- statusCode = httpClient.executeMethod(getMethod);
- if (logger.isDebugEnabled()){
- logger.debug("inget,statusCode:" + statusCode);
- }
- if (statusCode != HttpStatus.SC_OK) {
- // 访问失败
- logger.error("in get,访问appagent失败。网络问题。statusCode:" + statusCode);
- returnnull;
- }
- InputStream inputStream = getMethod.getResponseBodyAsStream();
- if (inputStream == null) {
- // 访问正常:获取到的数据为空
- logger.error("in get,从appagent返回的数据为空!");
- returnnull;
- }
- String rtn = IOUtils.toString(inputStream, "utf-8");
- return rtn;
- } catch (HttpException e) {
- logger.error("get方式访问appagent失败!", e);
- returnnull;
- } catch (IOException e) {
- logger.error("get方式访问appagent失败!", e);
- returnnull;
- } finally {
- getMethod.releaseConnection();
- }
- }
- /**
- * post方式访问
- *
- * @param url
- * @param callType
- * @param parmMap
- * @return
- */
- private String callByPost(Stringurl, String callType, Map<String, String> parmMap) {
- if (logger.isDebugEnabled()){
- logger.debug("inpost,url:" + url);
- }
- PostMethod p = new PostMethod(url);
- if (parmMap != null) {
- NameValuePair[] params = newNameValuePair[parmMap.size()];
- AtomicInteger atomicInteger = new AtomicInteger(0);
- for (Map.Entry<String, String> parm :parmMap.entrySet()) {
- NameValuePair parmValue = newNameValuePair(parm.getKey(), parm.getValue());
- params[atomicInteger.getAndIncrement()] = parmValue;
- }
- p.setRequestBody(params);
- }
- try {
- int statusCode = httpClient.executeMethod(p);
- logger.debug("inget,statusCode:" + statusCode);
- if (statusCode != HttpStatus.SC_OK) {
- // 异常
- logger.error("in post,访问appagent失败。网络问题。statusCode:" + statusCode);
- returnnull;
- }
- InputStream inputStream = p.getResponseBodyAsStream();
- if (inputStream == null) {
- // 访问正常
- logger.error("in post,从appagent返回的数据为空!");
- returnnull;
- }
- String rtn = IOUtils.toString(inputStream, "utf-8");
- return rtn;
- } catch (HttpException e) {
- logger.error("post方式访问appagent失败!", e);
- returnnull;
- } catch (IOException e) {
- logger.error("post方式访问appagent失败!", e);
- returnnull;
- } finally {
- p.releaseConnection();
- }
- }
- }
转正请指明:blog.csdn.net/yangkai_hudong
两种访问接口的方式(get和post)的更多相关文章
- 三,memcached服务的两种访问方式
memcached有两种访问方式,分别是使用telnet访问和使用php访问. 1,使用telnet访问memcacehd 在命令提示行输入, (1)连接memcached指令:telnet 127. ...
- js对象的 两种访问方式
来对象访问属性有两种方式.有一个对象Obj = {"Name":"Langshen","AGE":"28"} 用点访问, ...
- Java中有两种实现多线程的方式以及两种方式之间的区别
看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案. 网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thre ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- javascript两种声明函数的方式的一次深入解析
声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME ...
- 两种获取connectionString的方式
两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...
- Spring两种实现AOP的方式
有两种实现AOP的方式:xml配置文件的方式和注解的形式 我们知道通知Advice是指对拦截到的方法做什么事,可以细分为 前置通知:方法执行之前执行的行为. 后置通知:方法执行之后执行的行为. 异常通 ...
- JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式
JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
随机推荐
- 六、SAP中以一个变量的形式来定义另一种变量
一.代码如下: 二.输出
- 实验吧Web-难-猫抓老鼠
看题目好像就有让我们抓包的意思. 不管输什么走势一个结果:Check Failed! 也用bp爆破了,但是出不来什么结果. 抓到包后,送到repeater中go一下,发现有一串base64码,以为解码 ...
- [Python函数]encode,decode
前言: 我们知道,计算机是以二进制为单位的,也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字,只有先变成0和1,计算机才会识别它的意思.这种数据和二进制的转换规则就是编码.计算机的发展中, ...
- CodeForces - 748E Santa Claus and Tangerines(二分)
题意:将n个蛋糕分给k个人,要保证每个人都有蛋糕或蛋糕块,蛋糕可切, 1.若蛋糕值为偶数,那一次可切成对等的两块. 2.若蛋糕值为奇数,则切成的两块蛋糕其中一个比另一个蛋糕值多1. 3.若蛋糕值为1, ...
- 51nod 1438:方阵与完全平方数
1438 方阵与完全平方数 题目来源: mostleg 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 如果一个由正整数组成的n*n的方阵,满足以下 ...
- opencv3。4安装出错
https://www.samontab.com/web/2017/06/installing-opencv-3-2-0-with-contrib-modules-in-ubuntu-16-04-lt ...
- 201709-1 打酱油 Java
思路: 先看能不能买5瓶,因为送的最多,然后看能不能买3瓶,最后一瓶一瓶地买 import java.util.Scanner; public class Main { public static v ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:Number 对象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- keras_yolo3阅读
源码地址 https://github.com/qqwweee/keras-yolo3 春节期间仔细看了看yolov3的kears源码,这个源码毕竟不是作者写的,有点寒酸,可能大道至简也是这么个理.我 ...
- 从定时器的选型,到透过源码看XXL-Job(下)
透过源码看xxl-job (注:本文基于xxl-job最新版v2.0.2, quartz版本为 v2.3.1. 以下提到的调度中心均指xxl-job-admin项目) 上回说到,xxl-job是一个中 ...