在http://www.cnblogs.com/ITtangtang/p/3968093.html的基础上封装了一下get和post请求的常用方法,

虽然很简单,也晒晒

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.GetMethod;

import java.util.Iterator;
import java.util.Map;
import java.net.ConnectException;
import java.net.SocketTimeoutException;

/**
 *
 * @author zhang jinguang
 * @version $Id: HttpInvoker.java, v 0.1 2016年10月26日 下午2:17:59 zhang jinguang
 *          Exp $
 */
public class HttpInvoker {
    private static Log logger = LogFactory.getLog(HttpInvoker.class);
    // 默认字符集编码
    private final static String DEFAULT_CHARSET = "utf-8";
    // 默认超时时间, 单位为毫秒(ms)
    private final static int DEFAULT_TIMEOUT = 10000;

/**
     * http的默认get请求,默认超时时间为10s,默认字符集为utf-8,如需定制,请调用
     *
     * @author zhang jinguang 2016年10月26日
     * @param url:get请求的url地址,不要带参数,参数放到params里面
     * @param params:请求的url需要的参数, 没有参数,直接传null
     * @return
     * @throws Exception
     */
    public  static String httpGet(String url, Map<?, ?> params) throws Exception {
        return httpGet(url, params, DEFAULT_TIMEOUT, DEFAULT_CHARSET);
    }

/**
     * @author zhang jinguang 2016年10月26日
     * @param url:get请求的url地址,不要带参数,参数放到params里面
     * @param params
     * @param timeout
     * @param charset
     * @return
     * @throws Exception
     */
    public static String httpGet(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
        return invokeGet(url, params, timeout, charset);
    }

/**
     * http post请求
     *
     * @author zhang jinguang 2016年10月26日
     * @param url:请求的url
     * @param params:post的内容
     * @return
     * @throws Exception
     */
    public static String httpPost(String url, Map<?, ?> params) throws Exception {
        return httpPost(url, params, DEFAULT_TIMEOUT, DEFAULT_CHARSET);
    }

/**
     * http post请求
     *
     * @author zhang jinguang 2016年10月26日
     * @param url:请求的url
     * @param params:post的内容
     * @param timeout:超时时间
     * @param charset:字符集
     * @return
     * @throws Exception
     */
    public static String httpPost(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
        return invokePost(url, params, timeout, charset);
    }

/**
     * 实际的post请求
     *
     * @author zhang jinguang 2016年10月26日
     * @param url:请求的url
     * @param params:post的内容
     * @param timeout:超时时间
     * @param charset:字符集
     * @return
     * @throws Exception
     */
    private static String invokePost(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
        logger.debug("HTTP调用POST[" + url + "][" + params + "]");
        HttpMethod httpMethod = null;

if (params != null && params.size() > 0) {
            Iterator<?> paramKeys = params.keySet().iterator();
            httpMethod = new PostMethod(url);
            NameValuePair[] form = new NameValuePair[params.size()];
            int formIndex = 0;
            while (paramKeys.hasNext()) {
                String key = (String) paramKeys.next();
                Object value = params.get(key);
                if (value != null && value instanceof String && !value.equals("")) {
                    form[formIndex] = new NameValuePair(key, (String) value);
                    formIndex++;
                } else if (value != null && value instanceof String[] && ((String[]) value).length > 0) {
                    NameValuePair[] tempForm = new NameValuePair[form.length + ((String[]) value).length - 1];
                    for (int i = 0; i < formIndex; i++) {
                        tempForm[i] = form[i];
                    }
                    form = tempForm;
                    for (String v : (String[]) value) {
                        form[formIndex] = new NameValuePair(key, (String) v);
                        formIndex++;
                    }
                }
            }
            ((PostMethod) httpMethod).setRequestBody(form);
        }
        
        return executeNetRequest(url, timeout, charset, httpMethod);
    }

/**
     * 拼接请求参数
     *
     * @author zhang jinguang 2016年10月26日
     * @param url
     * @param params
     * @param timeout
     * @param charset
     * @return
     * @throws Exception
     */
    private static String invokeGet(String url, Map<?, ?> params, int timeout, String charset) throws Exception {
        logger.debug("HTTP调用GET[" + url + "][" + params + "]");
        HttpMethod httpMethod = null;

// 如果需要拼接请求参数
        if (params != null && params.size() > 0) {
            Iterator<?> paramKeys = params.keySet().iterator();
            StringBuffer getUrl = new StringBuffer(url.trim());
            if (url.trim().indexOf("?") > -1) {
                if (url.trim().indexOf("?") < url.trim().length() - 1
                        && url.trim().indexOf("&") < url.trim().length() - 1) {
                    getUrl.append("&");
                }
            } else {
                getUrl.append("?");
            }
            while (paramKeys.hasNext()) {
                String key = (String) paramKeys.next();
                Object value = params.get(key);
                if (value != null && value instanceof String && !value.equals("")) {
                    getUrl.append(key).append("=").append(value).append("&");
                } else if (value != null && value instanceof String[] && ((String[]) value).length > 0) {
                    for (String v : (String[]) value) {
                        getUrl.append(key).append("=").append(v).append("&");
                    }
                }
            }
            if (getUrl.lastIndexOf("&") == getUrl.length() - 1) {
                httpMethod = new GetMethod(getUrl.substring(0, getUrl.length() - 1));
            } else {
                httpMethod = new GetMethod(getUrl.toString());
            }
        } else {// 没有请求参数
            httpMethod = new GetMethod(url);
        }

return executeNetRequest(url, timeout, charset, httpMethod);
    }

/**
     * 执行网络请求
     *
     * @author zhang jinguang 2016年10月26日
     * @param url
     * @param timeout
     * @param charset
     * @param httpMethod
     * @return
     * @throws SocketTimeoutException
     * @throws ConnectException
     * @throws Exception
     */
    private static String executeNetRequest(String url, int timeout, String charset, HttpMethod httpMethod)
            throws SocketTimeoutException, ConnectException, Exception {
        HttpClient client = new HttpClient();
        client.getParams().setSoTimeout(timeout);
        client.getParams().setContentCharset(charset);

String result = "";
        try {
            client.executeMethod(httpMethod);
            result = httpMethod.getResponseBodyAsString();
        } catch (SocketTimeoutException e) {
            logger.error("连接超时[" + url + "]");
            throw e;
        } catch (java.net.ConnectException e) {
            logger.error("连接失败[" + url + "]");
            throw e;
        } catch (Exception e) {
            logger.error("连接时出现异常[" + url + "]");
            throw e;
        } finally {
            if (httpMethod != null) {
                try {
                    httpMethod.releaseConnection();
                } catch (Exception e) {
                    logger.error("释放网络连接失败[" + url + "]");
                    throw e;
                }
            }
        }
        
        return result;
    }
}

参考博文:http://www.cnblogs.com/ITtangtang/p/3968093.html

转载于:https://www.cnblogs.com/yipihema/p/6000683.html

http请求,普通的get和post方法相关推荐

  1. php post 文件,PHP响应post请求上传文件的方法_php技巧

    本文实例讲述了PHP响应post请求上传文件的方法.分享给大家供大家参考,具体如下: function send_file($url, $post = '', $file = '') { $eol = ...

  2. php循环输出多个网络地址图片,php中curl循环往请求多个URL和多线程去请求多个URL的方法...

    php 中curl 循环去请求多个URL和多线程去请求多个URL的方法 第一种:循环请求$sr=array(url_1,url_2,url_3); foreach ($sr as $k=>$v) ...

  3. 微信小程序 解决请求服务器手机预览请求不到数据的方法

    微信小程序 解决请求服务器手机预览请求不到数据的方法 微信小程序的文档中明确说明了所有的请求是必须使用https的,以没用过https,由于小程序,不得不接触到https,研究了好长时间把tomcat ...

  4. android危险权限分组,Android 6.0权限请求相关及权限分组方法

    Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请. 权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限, ...

  5. Ajax设置自定义请求头的两种方法

    用自定义请求头token为例 方法一 $.ajax({type: "post",url:"http://127.0.0.1:4564/bsky-app/template/ ...

  6. .ajax 自定义headers,Ajax设置自定义请求头的两种方法

    示例用自定义请求头token为例 方法一 $.ajax({ type: "post", url:"http://127.0.0.1:4564/bsky-app/templ ...

  7. ajax get 不会缓存,ajax的get请求时缓存处理解决方法

    ajax的get请求时缓存处理解决方法 本文实例讲述了ajax的get请求时缓存处理解决方法.分享给大家供大家参考.具体分析如下: 很多时候在Ajax的get方法调用的时候由于缓存的原因无法及时获取正 ...

  8. 微信浏览器发送ajax请求执行多次解决方法

    微信浏览器发送ajax请求执行多次解决方法 参考文章: (1)微信浏览器发送ajax请求执行多次解决方法 (2)https://www.cnblogs.com/hmhhz/p/8940145.html ...

  9. 记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法

    记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法 参考文章: (1)记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法 (2)https://www.cnblog ...

  10. vue 使用axios 出现跨域请求的两种解决方法

    vue 使用axios 出现跨域请求的两种解决方法 参考文章: (1)vue 使用axios 出现跨域请求的两种解决方法 (2)https://www.cnblogs.com/wangshengli5 ...

最新文章

  1. 【运维学习笔记】生命不息,搞事开始。。。
  2. 《Linux内核设计与实现》读书笔记(七)- 中断处理【转】
  3. oracle11g 多了个 client,Oracle10g Client Oracle11g DB同时安装发生OCI Error
  4. python 回归 显著_指南 | 量化选股with Python(2) 回归分析
  5. Scrapy入门(一)安装Scrapy环境
  6. [蓝桥杯2015初赛]生命之树-求树的最大子树权值和
  7. php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1
  8. Redis配置和常用命令
  9. linux下c/c++实例之socket服务器实例
  10. Redux 入坑笔记
  11. 《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.3节文字游戏
  12. 【codevs3955】最长严格上升子序列(加强版)
  13. Process相关函数
  14. paip.提升效率---质量控制--代码风格模板化
  15. 黑苹果OC引导注入_黑苹果OC配置工具:OpenCore Configurator v2.15.2.0
  16. 2020-02-21
  17. HTML常用标签总结 [建议收藏]
  18. android兼容低版本方法,Android 应用程序向低版本兼容的问题
  19. LaTeX里添加下划线无法自动换行
  20. 协同过滤推荐之基于近邻协同过滤(一)

热门文章

  1. C# 自定义sqlserver表值函数
  2. win10 安装 cognos 10.2.0
  3. 出现身份验证错误,要求的函数不受支持,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正
  4. rust睡觉按键没反应_扫描仪四个按键分别是
  5. 无法识别依赖属性_设计模式起步-UML学习 - 认识UML类图(依赖)
  6. 系统学习深度学习(十四)--权重初始化Xavier
  7. 系统学习机器学习之参数方法(三)
  8. [W:pyppeteer.chromium_downloader] start chromium download
  9. DNS如何查找IP?
  10. Android 使用 Gradle 打包 - 签名配置