两种访问接口的方式(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运作的中心,持久层操作的基础.对象的生命周期 ...
随机推荐
- python利用百度云接口实现车牌识别
一个小需求---实现车牌识别. 目前有两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) ! 一开始准备使 ...
- MVC学生管理系统-阶段V(模糊查询)
项目源码 :https://download.csdn.net/download/weixin_44718300/11091042 此处省略一段话.去上一篇查看 NO01:修改list.jsp < ...
- Swift 3 :基于 AVAudioPlayer 的简单音乐播放器
2017.05.22 17:46* 字数 1585 阅读 5095评论 0喜欢 8赞赏 2 https://www.jianshu.com/p/4d5c257428a1 学习ios以来差不多接近两个月 ...
- 从架构师视角看是否该用Kotlin做服务端开发?
前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...
- 在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
上次在网上找了一个在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4的文档,可能是这个文档不是最新版的,安装的时候遇到了很多问题, 最后跟一个大神要了一 ...
- MySQL-复制技术演进过程
复制技术的演进可以分为:基于数据安全的复制,基于效率的复制 基于数据安全的复制 异步复制 参考: https://baijiahao.baidu.com/s?id=163939455634386120 ...
- c# 循环界面控件
在 Winform 开发中,窗体(Form)就像一个大容器,可以装各种各样的控件,包括 Panel控件.如果窗体是 Winform 中的最大的容器,那么 Panel控件可以算是老二,它专门用于软件界面 ...
- 在设备上启用 adb 调试,有一个小秘密
要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下). 在搭载 Android 4.2 及更高版本的设备上,“开发者选项”屏幕默认情况下处于隐藏状 ...
- GoF 23种设计模式概述
本文的结构: 一.设计模式总览 二.创建型设计模式 Creational Patterns 三.结构型设计模式 Structural Patterns 四.行为型设计模式 Behavioral Pat ...
- centos通过yum安装php
1.添加php的yum软件仓库 sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 2.安装php相关软件,执行过程中全部选择ye ...