跨机器、跨语言的远程访问形式一共有三种:scoket发送数据包、http发送请求、rmi远程连接;

http发送请求方式;分为post和get两种方式

  1. importjava.io.IOException;
  2.  
  3. importjava.io.InputStream;
  4.  
  5. import java.util.Map;
  6.  
  7. importjava.util.concurrent.atomic.AtomicInteger;
  8.  
  9. importorg.apache.commons.httpclient.HttpClient;
  10.  
  11. importorg.apache.commons.httpclient.HttpException;
  12.  
  13. importorg.apache.commons.httpclient.HttpStatus;
  14.  
  15. importorg.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
  16.  
  17. importorg.apache.commons.httpclient.NameValuePair;
  18.  
  19. importorg.apache.commons.httpclient.methods.GetMethod;
  20.  
  21. importorg.apache.commons.httpclient.methods.PostMethod;
  22.  
  23. importorg.apache.commons.httpclient.params.HttpConnectionManagerParams;
  24.  
  25. importorg.apache.commons.io.IOUtils;
  26.  
  27. import org.slf4j.Logger;
  28.  
  29. import org.slf4j.LoggerFactory;
  30.  
  31. publicclass SendHttpUrl {
  32.  
  33. privatefinalstatic Logger logger = LoggerFactory.getLogger(SendHttpUrl.class);
  34.  
  35. privatestatic HttpClient httpClient = null;
  36.  
  37. privatestaticMultiThreadedHttpConnectionManager connectionManager = null;// 多线程管理器
  38.  
  39. privateintmaxThreadsTotal = 128;// 最大线程数
  40.  
  41. privateintmaxThreadsPerHost = 32; // 分配给每个客户端的最大线程数
  42.  
  43. privateintconnectionTimeout = 15000;// 连接超时时间,毫秒
  44.  
  45. privateintsoTimeout = 14000;// 读取数据超时时间,毫秒
  46.  
  47. publicvoid init() {
  48.  
  49. connectionManager = newMultiThreadedHttpConnectionManager();
  50.  
  51. HttpConnectionManagerParams params = newHttpConnectionManagerParams();
  52.  
  53. params.setConnectionTimeout(connectionTimeout);
  54.  
  55. params.setMaxTotalConnections(maxThreadsTotal);
  56.  
  57. params.setSoTimeout(soTimeout);
  58.  
  59. if (maxThreadsTotal > maxThreadsPerHost) {
  60.  
  61. params.setDefaultMaxConnectionsPerHost(maxThreadsPerHost);
  62.  
  63. } else {
  64.  
  65. params.setDefaultMaxConnectionsPerHost(maxThreadsTotal);
  66.  
  67. }
  68.  
  69. connectionManager.setParams(params);
  70.  
  71. httpClient = new HttpClient(connectionManager);
  72.  
  73. httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
  74.  
  75. httpClient.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);
  76.  
  77. }
  78.  
  79. /**
  80.  
  81. * get方式访问
  82.  
  83. *
  84.  
  85. * @param url
  86.  
  87. * @param callType
  88.  
  89. * @param parmMap
  90.  
  91. * @return
  92.  
  93. */
  94.  
  95. private String callByGet(Stringurl, String callType, Map<String, String> parmMap) {
  96.  
  97. if (logger.isDebugEnabled()){
  98.  
  99. logger.debug("in get,url:" + url);
  100.  
  101. }
  102.  
  103. GetMethod getMethod = new GetMethod(url);
  104.  
  105. int statusCode = 0;
  106.  
  107. try {
  108.  
  109. statusCode = httpClient.executeMethod(getMethod);
  110.  
  111. if (logger.isDebugEnabled()){
  112.  
  113. logger.debug("inget,statusCode:" + statusCode);
  114.  
  115. }
  116.  
  117. if (statusCode != HttpStatus.SC_OK) {
  118.  
  119. // 访问失败
  120.  
  121. logger.error("in get,访问appagent失败。网络问题。statusCode:" + statusCode);
  122.  
  123. returnnull;
  124.  
  125. }
  126.  
  127. InputStream inputStream = getMethod.getResponseBodyAsStream();
  128.  
  129. if (inputStream == null) {
  130.  
  131. // 访问正常:获取到的数据为空
  132.  
  133. logger.error("in get,从appagent返回的数据为空!");
  134.  
  135. returnnull;
  136.  
  137. }
  138.  
  139. String rtn = IOUtils.toString(inputStream, "utf-8");
  140.  
  141. return rtn;
  142.  
  143. } catch (HttpException e) {
  144.  
  145. logger.error("get方式访问appagent失败!", e);
  146.  
  147. returnnull;
  148.  
  149. } catch (IOException e) {
  150.  
  151. logger.error("get方式访问appagent失败!", e);
  152.  
  153. returnnull;
  154.  
  155. } finally {
  156.  
  157. getMethod.releaseConnection();
  158.  
  159. }
  160.  
  161. }
  162.  
  163. /**
  164.  
  165. * post方式访问
  166.  
  167. *
  168.  
  169. * @param url
  170.  
  171. * @param callType
  172.  
  173. * @param parmMap
  174.  
  175. * @return
  176.  
  177. */
  178.  
  179. private String callByPost(Stringurl, String callType, Map<String, String> parmMap) {
  180.  
  181. if (logger.isDebugEnabled()){
  182.  
  183. logger.debug("inpost,url:" + url);
  184.  
  185. }
  186.  
  187. PostMethod p = new PostMethod(url);
  188.  
  189. if (parmMap != null) {
  190.  
  191. NameValuePair[] params = newNameValuePair[parmMap.size()];
  192.  
  193. AtomicInteger atomicInteger = new AtomicInteger(0);
  194.  
  195. for (Map.Entry<String, String> parm :parmMap.entrySet()) {
  196.  
  197. NameValuePair parmValue = newNameValuePair(parm.getKey(), parm.getValue());
  198.  
  199. params[atomicInteger.getAndIncrement()] = parmValue;
  200.  
  201. }
  202.  
  203. p.setRequestBody(params);
  204.  
  205. }
  206.  
  207. try {
  208.  
  209. int statusCode = httpClient.executeMethod(p);
  210.  
  211. logger.debug("inget,statusCode:" + statusCode);
  212.  
  213. if (statusCode != HttpStatus.SC_OK) {
  214.  
  215. // 异常
  216.  
  217. logger.error("in post,访问appagent失败。网络问题。statusCode:" + statusCode);
  218.  
  219. returnnull;
  220.  
  221. }
  222.  
  223. InputStream inputStream = p.getResponseBodyAsStream();
  224.  
  225. if (inputStream == null) {
  226.  
  227. // 访问正常
  228.  
  229. logger.error("in post,从appagent返回的数据为空!");
  230.  
  231. returnnull;
  232.  
  233. }
  234.  
  235. String rtn = IOUtils.toString(inputStream, "utf-8");
  236.  
  237. return rtn;
  238.  
  239. } catch (HttpException e) {
  240.  
  241. logger.error("post方式访问appagent失败!", e);
  242.  
  243. returnnull;
  244.  
  245. } catch (IOException e) {
  246.  
  247. logger.error("post方式访问appagent失败!", e);
  248.  
  249. returnnull;
  250.  
  251. } finally {
  252.  
  253. p.releaseConnection();
  254.  
  255. }
  256.  
  257. }
  258.  
  259. }

转正请指明:blog.csdn.net/yangkai_hudong

两种访问接口的方式(get和post)的更多相关文章

  1. 三,memcached服务的两种访问方式

    memcached有两种访问方式,分别是使用telnet访问和使用php访问. 1,使用telnet访问memcacehd 在命令提示行输入, (1)连接memcached指令:telnet 127. ...

  2. js对象的 两种访问方式

    来对象访问属性有两种方式.有一个对象Obj = {"Name":"Langshen","AGE":"28"} 用点访问, ...

  3. Java中有两种实现多线程的方式以及两种方式之间的区别

    看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案. 网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thre ...

  4. OC中两种单例实现方式

    OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...

  5. javascript两种声明函数的方式的一次深入解析

    声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME ...

  6. 两种获取connectionString的方式

    两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...

  7. Spring两种实现AOP的方式

    有两种实现AOP的方式:xml配置文件的方式和注解的形式 我们知道通知Advice是指对拦截到的方法做什么事,可以细分为 前置通知:方法执行之前执行的行为. 后置通知:方法执行之后执行的行为. 异常通 ...

  8. JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

    JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

  9. Hibernate中两种获取Session的方式

    转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...

随机推荐

  1. 六、SAP中以一个变量的形式来定义另一种变量

    一.代码如下: 二.输出

  2. 实验吧Web-难-猫抓老鼠

    看题目好像就有让我们抓包的意思. 不管输什么走势一个结果:Check Failed! 也用bp爆破了,但是出不来什么结果. 抓到包后,送到repeater中go一下,发现有一串base64码,以为解码 ...

  3. [Python函数]encode,decode

    前言: 我们知道,计算机是以二进制为单位的,也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字,只有先变成0和1,计算机才会识别它的意思.这种数据和二进制的转换规则就是编码.计算机的发展中, ...

  4. CodeForces - 748E Santa Claus and Tangerines(二分)

    题意:将n个蛋糕分给k个人,要保证每个人都有蛋糕或蛋糕块,蛋糕可切, 1.若蛋糕值为偶数,那一次可切成对等的两块. 2.若蛋糕值为奇数,则切成的两块蛋糕其中一个比另一个蛋糕值多1. 3.若蛋糕值为1, ...

  5. 51nod 1438:方阵与完全平方数

    1438 方阵与完全平方数 题目来源: mostleg 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 如果一个由正整数组成的n*n的方阵,满足以下 ...

  6. opencv3。4安装出错

    https://www.samontab.com/web/2017/06/installing-opencv-3-2-0-with-contrib-modules-in-ubuntu-16-04-lt ...

  7. 201709-1 打酱油 Java

    思路: 先看能不能买5瓶,因为送的最多,然后看能不能买3瓶,最后一瓶一瓶地买 import java.util.Scanner; public class Main { public static v ...

  8. 吴裕雄--天生自然 JAVASCRIPT开发学习:Number 对象

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. keras_yolo3阅读

    源码地址 https://github.com/qqwweee/keras-yolo3 春节期间仔细看了看yolov3的kears源码,这个源码毕竟不是作者写的,有点寒酸,可能大道至简也是这么个理.我 ...

  10. 从定时器的选型,到透过源码看XXL-Job(下)

    透过源码看xxl-job (注:本文基于xxl-job最新版v2.0.2, quartz版本为 v2.3.1. 以下提到的调度中心均指xxl-job-admin项目) 上回说到,xxl-job是一个中 ...