跨机器、跨语言的远程访问形式一共有三种: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)的更多相关文章

  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. Android进阶——学习AccessibilityService实现微信抢红包插件

    在你的手机更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,其实这个功能是为了增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人们 它的具体实现是通过A ...

  2. 基于图灵api的Python机器人

    一.注册图灵机器人 先注册并登录图灵机器人官网: 点击创建机器人 复制机器人的key 二.搭建Python机器人 Python版本:3.6 注意替换第三行代码的apikey import reques ...

  3. 2019.9.30极限测试 04.JAVA语言课堂测试试卷-极限测试

    题目存储在上传的文件当中. 代码实现 Subway 类: package ClassroomTest; public class Subway { private String railway; pr ...

  4. dp--P1439 最长公共子序列(LCS)

    题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入格式 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式 一个数,即最长公共子序列的长度 找出两 ...

  5. 操作实践:maven工程查找工程中多余的jar包

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 版本迭代过程中对jar的依赖可能会产生变化,一些本不必再依赖的jar包可以因为没有清除而依然留在版本的发布 ...

  6. 基于表单的web暴力破解

    暴力破解 概述 连续性尝试+字典+自动化 如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施,则该网站存在暴力破解漏洞. 是否要求用户设置了复杂的密码 是否每次认证都是用安全的验证 ...

  7. 提高js性能的方法

    1.文档瘦身 (1)删除注释(版权及法律声明部分应保留),运行时不需要注释. (2)删除制表符.空格和换行符,这些只是为了便于程序的维护,但是与执行无关. (3)替换长的变量名为短的变量名. (4)使 ...

  8. MyBatis项目报错:The server time zone value '�й�׼' is unrecognized or represents more than one time zone

    问题来源:在部署Spring + MyBatis项目的时候,运行时报错The server time zone value '�й�׼' is unrecognized or represents m ...

  9. rename 修改文件名

    Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了,由于历史原因,在Perl语言 ...

  10. MVC思想概叙

    随着应用系统的逐渐增大,系统的业务逻辑复杂度是以几何的方式增长,在这种情况下,如果依然把所有的业务逻辑都放在JSP页面中,那将成为一场恶梦. MVC思想将应用中各个组件按照功能来进行分类,不同的组将使 ...