HttpClient通过MultiThreadedHttpConnectionManager实现多线程通讯
HttpConnectionManagerParams设置connectionTimeout链接超时,soTimeout读取数据超时,maxTotalConnections,defaultMaxConnectionsPerHost等等参数
MultiThreadedHttpConnectionManager多线程中属性params是HttpConnectionManagerParams
Spring中xml配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- httpclient线程池 -->
<bean id="connectionManagerParams" class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
<property name="connectionTimeout" value="10000"/>
<property name="soTimeout" value="10000"/>
<property name="maxTotalConnections" value="30"/>
<property name="defaultMaxConnectionsPerHost" value="20"/>
</bean>
<bean id="connectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
<property name="params" ref="connectionManagerParams"/>
</bean>
<bean id="httpclient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<ref bean="connectionManager"/>
</constructor-arg>
</bean>
<bean id="httpClientUtil" class="com.chinaums.utils.HttpClientUtil">
<property name="httpclient" ref="httpclient"/>
</bean>
</beans>
package com.chinaums.utils;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
/**
* httpClient工具类
*
*
*/
public class HttpClientUtil {
private HttpClient httpclient;
public void setHttpclient(HttpClient httpclient) {
this.httpclient = httpclient;
}
public HttpClientUtil() {
}
/**
* 以get方式发送http请求
*
* @param url
* @return
*/
public String sendRequest(String url) {
GetMethod getMethod = new GetMethod(url);
try {
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());
// httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(6000);
// getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,6000);
httpclient.executeMethod(getMethod);
return getMethod.getResponseBodyAsString();
} catch (Exception e) {
e.printStackTrace();
return "FAIL";
}
finally{
getMethod.releaseConnection();
}
}
/**
* 以get方式发送http请求
*
* @param url
* @return
*/
public boolean isActive(String url) {
boolean flag = false;
GetMethod getMethod = new GetMethod(url);
try {
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());
int statusCode = httpclient.executeMethod(getMethod);
if(statusCode==200){
flag = true;
}
return flag;
} catch (Exception e) {
e.printStackTrace();
return flag;
}
finally{
getMethod.releaseConnection();
}
}
/**
* 以post方式发送http请求
*
* @param url
* @return
*/
public int sendRequestAsPost(String url) {
PostMethod postMethod = new PostMethod(url);
try {
postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());
httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(1000);
postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,1000);
int statusCode = httpclient.executeMethod(postMethod);
return statusCode;
} catch (Exception e) {
e.printStackTrace();
return 500;
}
finally{
postMethod.releaseConnection();
}
}
/**
* 验证请求是否是本机发出
*
* @param request
* true本机发出 false非本机发出
* @return
*/
public static boolean isRequestFromSelf(HttpServletRequest request) {
if (getRemoteIpAddr(request).equals(getLocalIpAddr()))
return true;
else
return false;
}
/**
* 获取远程客户端IP地址
*
* @param request
* @return
*/
public static String getRemoteIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("HTTP_CLIENT_IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
if ("0:0:0:0:0:0:0:1".equals(ip.trim()))
ip = "server";
// 判断请求是否是本机发出,如果是本机发出,那么就获取本机地址
if ("127.0.0.1".equals(ip) || ip.equalsIgnoreCase("localhost"))
ip = getLocalIpAddr();
return ip;
}
/**
* 获取本机IP地址
*
* @return
*/
public static String getLocalIpAddr() {
try {
Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
String ipAddr = null;
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
ip = (InetAddress) ni.getInetAddresses().nextElement();
if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
ipAddr = ip.getHostAddress();
break;
}
}
return ipAddr;
} catch (SocketException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 判断某回调地址是否是指定的网关地址
*
* @param notifyUrl
* @param getwayList
* @return true 是网关 false不是网关地址
*/
public static boolean isLocalNotifyUrl(String notifyUrl, List getwayList) {
boolean flag = false;
for (Object object : getwayList) {
String getway = (String) object;
if (notifyUrl.toLowerCase().contains(getway)) {
flag = true;
break;
}
}
return flag;
}
public static void main(String[] arg){
HttpClient httpclient = new HttpClient();
String url = "http://www.163.com";
GetMethod method = new GetMethod(url);
try {
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());
int statusCode = httpclient.executeMethod(method);
System.out.println(statusCode);
byte[] responseBody = method.getResponseBody();
System.out.println(new String(responseBody));
} catch (Exception e) {
e.printStackTrace();
}
finally{
method.releaseConnection();
}
}
}
分享到:
相关推荐
学生信息管理系统-----------无数据库版本。资源来源于网络分享,如有侵权请告知!
2024年福建省村级(居委会)行政区划shp数据集 坐标系:WGS1984
win32汇编环境,对话框中显示bmp图像文件
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数。 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电耗、匀速工况续航、百公里电耗等信息。 实际项目中使用的计算仿真模型.
2020CCF下降2020 CCF大数据与计算智能大赛-非结构化商业文本信息中隐私信息识别-第7名方案bert base + flat + crf + fgm + swa + pu learning策略 + clue数据集 = test1单模0.906词向量https://github.com/Embedding/Chinese-Word-Vectors SGNS(Mixed-large 综合)loss mask相关代码为pu learning策略的实现主要模块版本 python 3.6.9火炬 1.1.0变压器 3.0.2pytorchcrf 1.2.0torchcontrib 0.0.2
计算机系毕业设计
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
基于SpringBoot+MySQL图书销售管理系统网上书店项目源码+数据库(高分毕业设计&课程设计) 该项目是个人大作业项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 图书管理系统 框架介绍 依赖 版本 Spring Boot 2 Mybatis Plus 3.5.3 jjwt 0.11.2 vue 2.0 ehcache 2.10.9 系统采用前后端分离,前端打包后放在 /resources/static 目录下面 直接启动后端工程即可访问 系统亮点 采用rsa非对称加密算法生成 jwt认证密钥 springboot集成ehcache作为缓存 采用aop方式记录接口访问日志 使用h2内存数据库,启动应用执行自动建表语句和初始化数据 统一异常和响应进行封装 集成springdoc作为接口文档 系统访问 http://wholevoid.com:9090/ 用户名及密码 admin/123456 图书管理系统 框
二极管钳位三电平VSG仿真模型 1.加入中点电位平衡 2.仿真有视频教程 3.THD均<5% 可以在此模型的基础上加入自适应控制、模型预测控制等等
基于Halcon的机器视觉试验平台的设计与研究 20181126
腾讯云开发者工具套件(SDK)3.0,SDK3.0是云 API3.0 平台的配套工具。目前已经支持cvm、vpc、cbs等产品,后续所有的云服务产品都会接入进来。新版SDK实现了统一化,具有各个语言版本的SDK使用方法相同,接口调用方式相同,统一的错误码和返回包格式这些优点。 为方便 Python 开发者调试和接入腾讯云产品 API,这里向您介绍适用于 Python 的腾讯云开发工具包,并提供首次使用开发工具包的简单示例。让您快速获取腾讯云 Python SDK 并开始调用。
说明文档1 队伍简介初赛名次第42名复赛名次第22名队伍名把球给我两名队员全部来自中国科学院大学2 算法思路首先手工标记第一阶段2015年和2017的图像里的建筑物,将大图像划分成小图像,训练多个模型,识别出图像中的建筑物,不对测试集(第二阶段的图像)进行任何标注,直接在图像上预测,分别识别出2015和2017的建筑物,再将所得的两张建筑物图像相减,对结果文件进行边缘平滑和散点去除即可得出最后的结果。切割成160*160、224*224、256*256大小的小图片训练模型基于第一阶段的训练数据,分别训练了deeplabv2、resnet_fcn两个模型,分别在3种大小的图像上训练得到了5个模型(由于resnet最小图像限制为197,只用了224和256两种大小的图像),设定输出概率大于0.5判定为建筑物,小于0.5则为非建筑物未在测试数据上进行建筑物标注,线下建筑物识别准确率82%左右,经过标注,建筑物识别准确率能达到90%。复赛初始提交,泛化成绩0.742。经过数据标注和再训练,最终成绩0.829。数据增强用于模型训练阶段,数据后处理是对
tdm64-gcc-5.1.0-2 (不盈利分享)
python语言mp3pl爬虫程序代码XQZQ
三相不平衡电压下T型NPC三电平并网逆变器并网控制 1.采用正负序分离锁相环以及正序PI控制,负序PI控制 2.采用中点电位平衡控制-零序电压注入法 3.采用SVPWM羊角波调制方式 4.提供参考文献 提供仿真源文件,电流环参数设计,正负序分离方法详解,零序电压注入法详解,SVPWM调制原理
Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都