`
mimang2007110
  • 浏览: 237341 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

HttpClient各种使用方法

阅读更多

最近项目中用到了模拟HTTP请求的部分,下面做了一个小整合,希望能给大家提供一定的参考,如果写的有问题,请帮忙指正,谢谢。

    /**
     * <设置请求头及请求属性>
     * <功能详细描述>
     * @param method 请求对象
     * @param contentType 内容类型
     * @see [类、类#方法、类#成员]
     */
    private static void setMethodParams(HttpMethodBase method, String contentType)
    {
        // 连接类型
        method.addRequestHeader("Connection", "keep_live");
        
        // 内容类型
        if (!isEmpty(contentType))
        {
            method.addRequestHeader("Content-Type", contentType);
        }
        
        // 设置POST请求超时时间
        method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, httpRequestTimeout);
        
        // 消息头里带上鉴权
        method.addRequestHeader("Authorization", authorization);
    }
    
    /**
     * <使用POST方式提交HTTP请求>
     * <功能详细描述>
     * @param address 请求地址
     * @param entity 请求参数
     * @return 返回请求结果
     * @throws HttpException
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public static String sendPostRequest(String address, RequestEntity entity)
        throws HttpException, IOException
    {
        // 如果请求地址为空直接退出请求
        logger.info("Request Address Is " + address);
        if (isEmpty(address))
        {
            return "";
        }
        
        // 存储服务器的响应消息
        String responseMsg = "";
        
        // 客户端对象
        HttpClient client = new HttpClient();
        
        // 设置连接超时时间
        client.getHttpConnectionManager().getParams().setConnectionTimeout(httpConnectionTimeout);
        
        // POST对象
        PostMethod method = new PostMethod(address);
        
        // 设置请求头及属性
        setMethodParams(method, null);
        
        // 参数对象
        if (null != entity)
        {
            method.setRequestEntity(entity);
        }
        
        // 执行的结果
        client.executeMethod(method);
        responseMsg = method.getResponseBodyAsString();
        logger.info("Response Message Is " + responseMsg);
        
        // 释放客户端连接
        method.releaseConnection();
        
        // 返回响应结果
        return responseMsg;
    }
    
    /**
     * <使用POST方式提交HTTP请求>
     * <包含多个请求参数时使用该方法>
     * @param address 请求地址
     * @param parts 多个请求参数集合
     * @return 返回请求结果
     * @throws HttpException
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public static String sendPostRequest(String address, NameValuePair[] values)
        throws HttpException, IOException
    {
        // 如果请求地址为空直接退出请求
        logger.info("Request Address Is " + address);
        if (isEmpty(address))
        {
            return "";
        }
        
        // 存储服务器的响应消息
        String responseMsg = "";
        
        // 客户端对象
        HttpClient client = new HttpClient();
        
        // 设置连接超时时间
        client.getHttpConnectionManager().getParams().setConnectionTimeout(httpConnectionTimeout);
        
        // POST对象
        PostMethod method = new PostMethod(address);
        
        // 设置请求头及属性
        setMethodParams(method, "application/x-www-form-urlencoded");
        
        // 参数对象
        if (null != values)
        {
            method.setRequestBody(values);
        }
        
        // 执行的结果
        client.executeMethod(method);
        responseMsg = method.getResponseBodyAsString();
        logger.info("Response Message Is " + responseMsg);
        
        // 释放客户端连接
        method.releaseConnection();
        
        // 返回响应结果
        return responseMsg;
    }
    
    /**
     * <使用POST方式提交HTTP请求>
     * <多个请求参数包含文件时使用该方法>
     * @param address 请求地址
     * @param parts 多个请求参数集合
     * @return 返回请求结果
     * @throws HttpException
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public static String sendPostRequest(String address, Part[] parts)
        throws HttpException, IOException
    {
        // 如果请求地址为空直接退出请求
        logger.info("Request Address Is " + address);
        if (isEmpty(address))
        {
            return "";
        }
        
        // 存储服务器的响应消息
        String responseMsg = "";
        
        // 客户端对象
        HttpClient client = new HttpClient();
        
        // 设置连接超时时间
        client.getHttpConnectionManager().getParams().setConnectionTimeout(httpConnectionTimeout);
        
        // POST对象
        PostMethod method = new PostMethod(address);
        
        // 设置请求头及属性
        setMethodParams(method, null);
        
        // 参数对象
        if (null != parts)
        {
            method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams()));
        }
        
        // 执行的结果
        client.executeMethod(method);
        responseMsg = method.getResponseBodyAsString();
        logger.info("Response Message Is " + responseMsg);
        
        // 释放客户端连接
        method.releaseConnection();
        
        // 返回响应结果
        return responseMsg;
    }
    
    /**
     * <使用POST方式提交HTTP请求>
     * <包含多个请求参数时使用该方法>
     * @param address 请求地址
     * @param params 参数字符串
     * @return 返回请求结果
     * @throws HttpException
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public static String sendPostRequest(String address, String params)
        throws HttpException, IOException
    {
        // 如果请求地址为空直接退出请求
        logger.info("Request Address Is " + address);
        if (isEmpty(address))
        {
            return "";
        }
        
        // 参数对象
        if (null != params)
        {
            address = address + "?" + params;
        }
        
        // 存储服务器的响应消息
        String responseMsg = "";
        
        // 客户端对象
        HttpClient client = new HttpClient();
        
        // 设置连接超时时间
        client.getHttpConnectionManager().getParams().setConnectionTimeout(httpConnectionTimeout);
        
        // POST对象
        PostMethod method = new PostMethod(address);
        
        // 设置请求头及属性
        setMethodParams(method, "application/x-www-form-urlencoded");
        
        // 执行的结果
        client.executeMethod(method);
        responseMsg = method.getResponseBodyAsString();
        logger.info("Response Message Is " + responseMsg);
        
        // 释放客户端连接
        method.releaseConnection();
        
        // 返回响应结果
        return responseMsg;
    }
    
    /**
     * <使用GET方式提交HTTP请求>
     * <功能详细描述>
     * @param address 请求地址
     * @param params 请求参数
     * @return 返回请求结果
     * @throws HttpException
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public static String sendGetRequest(String address, String params)
        throws HttpException, IOException
    {
        // 如果请求地址为空直接退出请求
        logger.info("Request Address Is " + address);
        if (isEmpty(address))
        {
            return "";
        }
        
        // 存储服务器的响应消息
        String responseMsg = "";
        
        // 客户端对象
        HttpClient client = new HttpClient();
        
        // 设置连接超时时间
        client.getHttpConnectionManager().getParams().setConnectionTimeout(httpConnectionTimeout);
        
        // GET对象
        GetMethod method = null;
        if (!isEmpty(params))
        {
            method = new GetMethod(address + "?" + params);
        }
        else
        {
            method = new GetMethod(address);
        }
        
        // 设置请求头及属性
        setMethodParams(method, null);
        
        // 执行的结果
        client.executeMethod(method);
        responseMsg = method.getResponseBodyAsString();
        logger.info("Response Message Is " + responseMsg);
        
        // 释放客户端连接
        method.releaseConnection();
        
        // 返回响应结果
        return responseMsg;
    }
    
    /**
     * <使用GET方式提交HTTP请求>
     * <功能详细描述>
     * @param address 请求地址
     * @param params 请求参数
     * @return 返回请求结果
     * @throws HttpException
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public static String[] sendGetRequest(String[] address, String params)
        throws HttpException, IOException
    {
        // 如果请求地址为空直接退出请求
        logger.info("Request Address Is " + address);
        if (null == address)
        {
            return null;
        }
        
        // 存储响应结果
        String[] responseMsg = new String[address.length];
        
        // 客户端对象
        HttpClient client = new HttpClient();
        
        // 设置连接超时时间
        client.getHttpConnectionManager().getParams().setConnectionTimeout(httpConnectionTimeout);
        
        // GET对象
        GetMethod method = null;
        for (int i = 0; i < address.length; i++)
        {
            if (!isEmpty(params))
            {
                method = new GetMethod(address[i] + "?" + params);
            }
            else
            {
                method = new GetMethod(address[i]);
            }
            
            // 设置请求头及属性
            setMethodParams(method, null);
            
            // 执行的结果
            client.executeMethod(method);
            String result = method.getResponseBodyAsString();
            responseMsg[i] = result;
            logger.info("Response Message Is " + result);
        }
        
        // 释放客户端连接
        method.releaseConnection();
        
        // 返回响应结果
        return responseMsg;
    }

 注:authorization字符串的计算方式如下:

    /**
     * <获取xml文件中的值赋给全局变量>
     * <功能详细描述>
     * @see [类、类#方法、类#成员]
     */
    public static void readConfigXml()
    {
        try
        {
            // 获取资源流
            InputStream in = Global.class.getResourceAsStream("/config.xml");
            
            // 获取根节点
            SAXReader sax = new SAXReader();
            sax.setEncoding("UTF-8");
            Document doc = sax.read(in);
            Element root = doc.getRootElement();
            
            // 路由器用户名
            apName = root.elementText("apName");
            
            // 路由器密码
            apPwd = root.elementText("apPwd");
            
            // 链接超时时间
            httpConnectionTimeout = Integer.parseInt(root.elementText("httpConnectionTimeout")) * 1000;
            
            // 请求超时时间
            httpRequestTimeout = Integer.parseInt(root.elementText("httpRequestTimeout")) * 1000;
            
            // 检查次数
            checkCount = Integer.parseInt(root.elementText("checkCount"));
            
            // 鉴权字符串
            authorization = "Basic " + DatatypeConverter.printBase64Binary((apName + ":" + apPwd).getBytes("UTF-8"));
        }
        catch (Exception e)
        {
            logger.error(LOG_EXCEPTION_NAME, e);
        }
    }

  

 

分享到:
评论

相关推荐

    【ASP.NET编程知识】.NET CORE HttpClient的使用方法.docx

    .NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...

    使用HttpClient调试android接口-通用方法

    在这个场景下,"使用HttpClient调试android接口-通用方法"的标题表明我们将讨论如何使用HttpClient来调试Android应用中的API接口。下面,我们将深入探讨HttpClient的基础知识、调试技巧以及如何封装通用方法。 1. *...

    httpclient简单使用

    本教程将基于标题"HTTPClient简单使用"和提供的文件`HttpService`、`HttpClient`来阐述HTTPClient的基本使用方法。 1. **HTTPClient简介** HTTPClient是Apache的 HttpClient库,它为Java开发者提供了全面的HTTP...

    httpclient测试请求方法

    标题中的“httpclient测试请求方法”指的是使用Apache HttpClient库进行HTTP请求的方法。HttpClient是一个功能强大的客户端编程工具包,它允许开发者构建复杂的HTTP客户端应用程序。在本文中,我们将深入探讨...

    httpClient组件使用说明

    本篇文章将详细讲解HttpClient的使用方法,包括如何搭建环境、所需的jar包、基本应用以及实例演示,旨在帮助初级学员快速掌握HttpClient的基础操作。 一、环境搭建 在使用HttpClient之前,首先需要在项目中引入...

    Httpclient使用jar包三合一,基本使用方法

    简单使用方法: public static void main(String[] args) { // String str1 = &quot;http://dev.d-smart.cn/Login&quot;; // http协议路径 String str1 = &quot;&quot;; HttpClient httpClient = new HttpClient...

    httpclient使用post方法上传多个图片个其他参数的demo源码

    在本示例中,我们将关注“httpclient使用post方法上传多个图片和其他参数的demo源码”,这是一个涉及到文件上传和参数传递的重要场景。 在Web开发中,POST方法常用于向服务器提交数据,比如表单数据或文件。...

    httpclient使用教程

    ### httpclient使用教程 #### HttpClient概述与重要性 ...为了解决这一问题,Apache ...此教程不仅介绍了HttpClient的基本使用方法,还强调了资源管理和异常处理的重要性,是Java开发者处理HTTP通信不可或缺的技能之一。

    commons-httpclient,java中使用httpclient中使用的扩展工具

    同时,注意HttpClient库已经不再更新,对于新的Java项目,推荐使用现代化的HTTP客户端库,如Apache HttpClient的后继者Apache HTTP Components HttpClient 4.x系列,或者使用Java标准库的`java.net.http.HttpClient`...

    httpclient介绍及常用方法mm文档

    httpclient的介绍以及基本方法整理

    使用HttpClient必须的jar包

    它能够处理各种HTTP方法,如GET、POST、PUT、DELETE等,并支持HTTP头的设置和处理。 4. **连接管理**:HttpClient提供了`PoolingHttpClientConnectionManager`,用于管理HTTP连接池,可以有效地复用连接,提高性能...

    httpclient4.0 使用帮助、例子

    本篇文章将详细介绍HTTPClient 4.0的使用方法,包括其核心概念、基本操作和示例代码。 一、核心概念 1. HttpClient实例:HttpClient对象是执行HTTP请求的核心,负责建立连接、发送请求和接收响应。通过`...

    httpclient使用帮助类

    httpclient是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,本文档提供使用httpclient的使用方法

    HTTPClient 的一个封装

    在Java中,使用HttpClient可以方便地发送HTTP请求并接收响应,处理各种复杂的网络通信场景。 封装HttpClient的主要目的是提高代码的可读性和可维护性。通过创建一个简单的接口或类,开发者可以隐藏底层复杂的配置和...

    HttpClient使用教程 事例

    首先,HttpClient库提供了一套完整的API,允许开发者构建复杂的HTTP请求,包括GET、POST、PUT等HTTP方法,同时支持连接管理、重试策略、超时设置等高级特性。在Java项目中,HttpClient通常被用来替代内置的`java.net...

    HttpClientHelper 工具类

    HttpClientHelper 对这个类进行了封装,使得开发者无需直接与HttpClient接口打交道,而是通过更简洁、易用的方法调用来实现网络通信。这提高了代码的可读性和可维护性。 单例模式是软件设计模式的一种,确保一个类...

Global site tag (gtag.js) - Google Analytics