`

MultiThreadHttpClient

    博客分类:
  • java
 
阅读更多

package com.froad.points.bankserver.util;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.net.NoRouteToHostException;
import java.net.SocketTimeoutException;

import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.froad.points.bankserver.constant.Constants;
import com.froad.points.bankserver.exception.common.FroadException;

/**
 *
 * <pre>
 *  MultiThreadHttpClient  返回字符串和bety[]
 * </pre>
 *
 * @author xueyunlong
 * @create 2014年9月15日 下午4:54:24
 * @modify
 * @since   JDK1.6
 */
public class MultiThreadHttpClient {
    private static Log logger = LogFactory.getLog(MultiThreadHttpClient.class);
   
    @SuppressWarnings("deprecation")
    public static String postMethod(String reqUrl, String strStream) throws FroadException {
        String returnStr = "";
        logger.info("regUrl:"+reqUrl);
        // 多线程
        MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
        HttpClient httpClient = new HttpClient(connectionManager);
        // 测试是否超时
        HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();
        // 设置连接超时时间(单位毫秒)
        managerParams.setConnectionTimeout(200000);
        // 设置读数据超时时间(单位毫秒)
        managerParams.setSoTimeout(180000);
       
        PostMethod postMethod = new PostMethod(reqUrl);
        postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
        try {
            postMethod.setRequestBody(strStream);
            long startTime = System.currentTimeMillis();
            int status = httpClient.executeMethod(postMethod);
           
            //System.out.println("postMethod=============="+postMethod);
           
            long endTime = System.currentTimeMillis();
            logger.info(status+"status,连接用时" + (endTime - startTime) + "ms");
            if(status==HttpStatus.SC_OK){
                BufferedReader br=new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream(),"utf-8"));
                String line = "";
                StringBuffer buffer = new StringBuffer();
                while ((line = br.readLine()) != null) {
                    buffer.append(line);
                }
                logger.info("响应体:"+buffer.toString());
                returnStr = buffer.toString();
            } else {
                logger.info("服务器HTTP响应异常!状态码:"+status);
                throw new FroadException(Constants.RESULT_FAIL,"发生Http异常!");
            }
        } catch (HttpException e) {
            logger.info("发生Http异常:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"发生Http异常!");
        } catch (NoRouteToHostException e) {
            logger.info("本机未联网:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"本机未联网!");
        } catch (ConnectException e) {
            logger.info("连接不上服务器:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"连接不上服务器!");
        } catch (SocketTimeoutException e) {
            logger.info("读取数据超时:" + e);
            throw new FroadException(Constants.RESULT_PROCESSING,"读取数据超时!");
        } catch (ConnectTimeoutException e) {
            logger.info("连接超时:" + e);
            throw new FroadException(Constants.RESULT_PROCESSING,"连接超时!");
        } catch (IOException e) {
            logger.info("发生网络异常:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"发生网络异常!");
        } catch(Exception e) {
            logger.info("发生异常:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"发生异常!");
        } finally {
            postMethod.releaseConnection();
        }
        return returnStr;
    }
   
   
    @SuppressWarnings("deprecation")
    public static byte[] postAsStreamMethod(String reqUrl, String strStream) throws FroadException {
        logger.info("regUrl:"+reqUrl);
        // 多线程
        MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
        HttpClient httpClient = new HttpClient(connectionManager);
        // 测试是否超时
        HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();
        // 设置连接超时时间(单位毫秒)
        managerParams.setConnectionTimeout(200000);
        // 设置读数据超时时间(单位毫秒)
        managerParams.setSoTimeout(180000);
       
        PostMethod postMethod = new PostMethod(reqUrl);
        postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
        try {
            postMethod.setRequestBody(strStream);
            long startTime = System.currentTimeMillis();
            int status = httpClient.executeMethod(postMethod);
           
            //System.out.println("postMethod=============="+postMethod);
           
            long endTime = System.currentTimeMillis();
            logger.info(status+"status,连接用时" + (endTime - startTime) + "ms");
            if(status==HttpStatus.SC_OK){
                byte[]  b=InputStreamToByte(postMethod.getResponseBodyAsStream());
                return b;
            } else {
                logger.info("服务器HTTP响应异常!状态码:"+status);
                throw new FroadException(Constants.RESULT_FAIL,"发生Http异常!");
            }
        } catch (HttpException e) {
            logger.info("发生Http异常:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"发生Http异常!");
        } catch (NoRouteToHostException e) {
            logger.info("本机未联网:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"本机未联网!");
        } catch (ConnectException e) {
            logger.info("连接不上服务器:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"连接不上服务器!");
        } catch (SocketTimeoutException e) {
            logger.info("读取数据超时:" + e);
            throw new FroadException(Constants.RESULT_PROCESSING,"读取数据超时!");
        } catch (ConnectTimeoutException e) {
            logger.info("连接超时:" + e);
            throw new FroadException(Constants.RESULT_PROCESSING,"连接超时!");
        } catch (IOException e) {
            logger.info("发生网络异常:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"发生网络异常!");
        } catch(Exception e) {
            logger.info("发生异常:" + e);
            throw new FroadException(Constants.RESULT_FAIL,"发生异常!");
        } finally {
            postMethod.releaseConnection();
        }
    }
   
    public static byte[] InputStreamToByte(InputStream is) throws IOException {     
       ByteArrayOutputStream bytestream = new ByteArrayOutputStream(); 
       int ch; 
       while ((ch = is.read()) != -1) { 
        bytestream.write(ch); 
       } 
       byte imgdata[] = bytestream.toByteArray(); 
       bytestream.close(); 
       return imgdata; 
      }
   
}

分享到:
评论

相关推荐

    行业分析模板--初学者必备gl.ppt

    行业分析模板--初学者必备gl.ppt

    基于微信小程序端的视频社交软件 + 后台管理系统(仿抖音).zip

    简介随着微信的普及,小视频的流行,我们设计一款基于微信小程序端的视频社交软件 + 后台管理系统作为自己专科毕业设计----秀视频-微信小程序端(短视频社交小程序,用户可以在小程序上发布自己的短视频 并且经过我们的平台加入滤镜或者背景音乐制作出独具特色的短视频。并实现了点赞、评论、下载、分享、转发等功能的小程序)---的后台管理系统,主要实现了人员的管理,短视频的管理,背景音乐的管理,登陆注册,权限验证,单点登陆等等。 从需求分析,功能设计,前端到后台,再到数据库的设计。一点点的积累,一点点的完善,预计小程序端+后台管理系统开发周期一个月(每天更新)。 对一个开发人员来说,如果想单纯的做出这些功能,其实并不难。 难的是对于这些功能细节的把控,项目整体的友好程度,用户的体验效果;对并发的考虑,对恶意请求,对流畅度这些细节的考虑等等。

    基于matlab实现麦克风阵列的声源定位,四元十字阵的matlab仿真.rar

    基于matlab实现麦克风阵列的声源定位,四元十字阵的matlab仿真.rar

    某钢厂钢铁废水处理图纸.zip

    污水处理

    基于yoloV4,检测茶叶中的杂质,并利用混淆矩阵计算识别率

    混淆矩阵 检测茶叶中的杂质,并利用混淆矩阵计算出精确率和误判率 小技巧的设置 在train.py和train_eager.py文件下: 1、mosaic参数可用于控制是否实现Mosaic数据增强。 2、Cosine_scheduler可用于控制是否使用学习率余弦退火衰减。 3、label_smoothing可用于控制是否Label Smoothing平滑。

    基于matlab实现的一种新型的配电网潮流计算,基于前推回代法

    基于matlab实现的一种新型的配电网潮流计算,基于前推回代法,并附有10kv配电网数据,利用新的判别手段,成功解决配电网不收敛的问题.rar

    node-v7.3.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2024年入境旅游行业市场分析报告.pptx

    行业报告

    node-v6.13.0-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab实现的实现图像的平移,平移量应该可调(即用一个变量保存平移量)

    基于matlab实现的实现图像的平移,平移量应该可调(即用一个变量保存平移量),并显示对图像“view”的处理结果。 2.编程实现图像的缩放,缩放系数可调,分别用两个变量保存水平和垂直方向的缩放系数,并显示对图像“view”的处理结果。.rar

    基于VB+access实现抽奖系统(系统+论文+开题报告+外文翻译+封面+中英摘要+任务书+中期检查表).zip

    【项目资源】:基于VB+access实现抽奖系统(系统+论文+开题报告+外文翻译+封面+中英摘要+任务书+中期检查表) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    ASP基于BBS系统开发与帐户安全保护的实现(源代码+设计说明书).zip

    ASP基于BBS系统开发与帐户安全保护的实现(源代码+设计说明书).zip

    连续或间歇进水的SBR工艺反应池的工程设计计算.xls

    污水处理计算书

    卷积神经网络-基于VGGNet实现的遥感图像分类算法.zip

    卷积神经网络 卷积神经网络_基于VGGNet实现的遥感图像分类算法

    node-v10.19.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    MBR操作规程.doc

    课程设计,污水处理设计方案

    node-v10.23.3-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab实现的齿轮接触疲劳强度分析程序,机械设计中使用.rar

    基于matlab实现的齿轮接触疲劳强度分析程序,机械设计中使用.rar

    vue面试题30道经典.rar

    vue面试题30道经典

    node-v6.1.0.tar.xz

    node-v6.1.0.tar

Global site tag (gtag.js) - Google Analytics