两种访问接口的方式(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运作的中心,持久层操作的基础.对象的生命周期 ...
随机推荐
- java题求代码,4、现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5}
public class TEST { public static void main(String[] args) { int [] oldArr= {1,3,4,5,0,0,6,6,0,5,4,7 ...
- 十、CI框架之通过参数的办法输出URI路径
一.代码如下,index函数有2个参数 二.效果如下: 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.
- 005、mysql查询表的结构
EXPLAIN hcc_ip 如果有一个表,表明为hcc_ip,使用以上语句可以得到下图 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:38247724 ...
- Android尺寸单位
px:pixels(像素),1px的长度对应屏幕一个像素点的大小. dp/dip:(density-independent pixels,设备无关像素) sp:scaled pixels(可缩放像素) ...
- 吴裕雄--天生自然 PHP开发学习:常量
<?php // 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输 ...
- ansible shell 之运行后台程序
最近在使用ansible shell模块启动一个shell编写的脚本,该脚本主要功能式加载java的classpath并在后台运行这个java程序. 该脚本在linux shell中可以正常启动和停止 ...
- URL&HTTP协议详解
本文来自公开课笔记,主要做知识的记录,谢谢! ·接口测试核心技术--URL&HTTP协议详解. ·URL: 统一资源定位符. 示例: https://ke.qq.com/course/3157 ...
- NABCD模型——星遇
我们项目是个面向希望有新奇体验的用户的社交软件,致力于打造不一样的有趣的社交. 发表后一周预计用户量:1000人 N:(Need,需求) 目前主流社交软件由于时间原因体量越来越大,各种繁琐而不必要的功 ...
- tp5 输入域名即访问指定页面
遇到PC官网类型的项目,经常会遇到隐藏入口文件和输入域名即可打开官网首页的需求.需要修改站点的默认加载文件和伪静态的配置才可以生效. 以下为nginx1.15版本,宝塔面板的修改方式.修改入口文件为w ...
- Codeforces Round #622 (Div. 2)C2 Skyscrapers最大"尖"性矩形,思维||分治
题:https://codeforces.com/contest/1313/problem/C2 题意:给出n个数,分别代表第i个位置所能搭建的最大高度,问以哪一个位置的塔的高度为基准向左的每一个塔都 ...