package com.tzx.cc.common.constant.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.Set; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import org.apache.commons.lang.StringUtils; /**
* http请求工具类
*
* @author zhangyong
*
*/
public class HttpUtils {
private final String CTYPE_FORM = "application/x-www-form-urlencoded;charset=utf-8";
private final String CTYPE_JSON = "application/json; charset=utf-8";
private final String charset = "utf-8"; private static HttpUtils instance = null; public static HttpUtils getInstance() {
if (instance == null) {
return new HttpUtils();
}
return instance;
} private class DefaultTrustManager implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
} public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
} public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
} /**
* 以application/json; charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String postJson(String url, String jsonContent)
throws SocketTimeoutException, IOException {
return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,
null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String postForm(String url) throws SocketTimeoutException,
IOException {
return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String postForm(String url, Map<String, String> params)
throws SocketTimeoutException, IOException {
return doRequest("POST", url, buildQuery(params), 15000, 15000,
CTYPE_FORM, null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String getForm(String url) throws SocketTimeoutException,
IOException {
return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String getForm(String url, Map<String, String> params)
throws SocketTimeoutException, IOException {
return doRequest("GET", url, buildQuery(params), 15000, 15000,
CTYPE_FORM, null);
} private String doRequest(String method, String url, String requestContent,
int connectTimeout, int readTimeout, String ctype,
Map<String, String> headerMap) throws SocketTimeoutException,
IOException {
HttpURLConnection conn = null;
OutputStream out = null;
String rsp = null;
try {
conn = getConnection(new URL(url), method, ctype, headerMap);
conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout); if(!StringUtils.isEmpty(requestContent)){
out = conn.getOutputStream();
out.write(requestContent.getBytes(charset));
} rsp = getResponseAsString(conn);
} finally {
if (out != null) {
out.close();
}
if (conn != null) {
conn.disconnect();
}
conn = null;
}
return rsp;
} private HttpURLConnection getConnection(URL url, String method,
String ctype, Map<String, String> headerMap) throws IOException {
HttpURLConnection conn;
if ("https".equals(url.getProtocol())) {
SSLContext ctx;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0],
new TrustManager[] { new DefaultTrustManager() },
new SecureRandom());
} catch (Exception e) {
throw new IOException(e);
}
HttpsURLConnection connHttps = (HttpsURLConnection) url
.openConnection();
connHttps.setSSLSocketFactory(ctx.getSocketFactory());
connHttps.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
conn = connHttps;
} else {
conn = (HttpURLConnection) url.openConnection();
}
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Accept",
"text/xml,text/javascript,text/html,application/json");
conn.setRequestProperty("Content-Type", ctype);
if (headerMap != null) {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
return conn;
} private String getResponseAsString(HttpURLConnection conn)
throws IOException {
InputStream es = conn.getErrorStream();
if (es == null) {
return getStreamAsString(conn.getInputStream(), charset, conn);
} else {
String msg = getStreamAsString(es, charset, conn);
if (StringUtils.isEmpty(msg)) {
throw new IOException(conn.getResponseCode() + ":"
+ conn.getResponseMessage());
} else {
return msg;
}
}
} private String getStreamAsString(InputStream stream, String charset,
HttpURLConnection conn) throws IOException {
try {
Reader reader = new InputStreamReader(stream, charset); StringBuilder response = new StringBuilder();
final char[] buff = new char[1024];
int read = 0;
while ((read = reader.read(buff)) > 0) {
response.append(buff, 0, read);
} return response.toString();
} finally {
if (stream != null) {
stream.close();
}
}
} private String buildQuery(Map<String, String> params) throws IOException {
if (params == null || params.isEmpty()) {
return "";
} StringBuilder query = new StringBuilder();
Set<Map.Entry<String, String>> entries = params.entrySet();
boolean hasParam = false; for (Map.Entry<String, String> entry : entries) {
String name = entry.getKey();
String value = entry.getValue();
if (hasParam) {
query.append("&");
} else {
hasParam = true;
}
query.append(name).append("=")
.append(URLEncoder.encode(value, charset));
}
return query.toString();
}
}

Http请求工具类(Java原生Form+Json)的更多相关文章

  1. java jdk原生的http请求工具类

    package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...

  2. java模板模式项目中使用--封装一个http请求工具类

    需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  5. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  6. ajax请求工具类

    ajax的get和post请求工具类: /** * 公共方法类 *  * 使用  变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...

  7. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

  8. C# http请求工具类

    /// <summary> /// Http请求操作类之HttpWebRequest /// </summary> public class HttpHelper { #reg ...

  9. Http请求工具类 httputil

    package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import j ...

随机推荐

  1. HDU5126 stars(CDQ分治)

    传送门 大意: 向三维空间中加点,询问一个三维区间中点的个数. 解题思路: 带修改CDQ,将修改和询问一起插入CDQ分治询问. (询问可以由8个前缀和加减操作实现) 其中第一层CDQ维护x有序. 第二 ...

  2. POJ 3592--Instantaneous Transference【SCC缩点新建图 &amp;&amp; SPFA求最长路 &amp;&amp; 经典】

    Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6177   Accep ...

  3. ubuntu-软件解压方法(转载)

    一下内容转载自 http://blog.csdn.net/zad522/article/details/2770446 今天用到了ubuntu解压,所以就在网上查找了下方法.自己菜鸟一枚,收录别人的文 ...

  4. JavaScript篇(一)二叉树的插入 (附:可视化)

    一.二叉树概念 二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子. 字节一面,第一道就是二叉树的插入,在这里其实是对于一个二叉查找树的插入. 使二叉树成为二叉查找树的性质是 ...

  5. Mongodb总结5-通过装饰模式,用Mongodb解决Hbase的不稳定问题

    最近继续学习Mongodb的根本原因,是为了解决今天的问题.项目中用到了Hbase,生产环境服务器用了3台,但是不够稳定,每2天左右,就连不上了.重启就好了,当然,这是一个历史遗留问题.我在想,是不是 ...

  6. 各大免费邮箱邮件群发账户SMTP服务器配置及SMTP发送量限制情况

    网络产品推广和新闻消息推送时,经常用到的工具就是用客户邮箱发送邮件了,如果是要发送的邮件量非常大的话,一般的建议是搭建自己的邮局服务器,或者是花钱购买专业的邮件群发服务,免费邮箱的SMTP适合少量的邮 ...

  7. 【原创】面向对象版本地CPU资源占用监控脚本

    前期准备: 1.python2.7环境 2.相关第三方库下载安装 脚本工作过程: 1.根据输入的进程名判断进程是否存在,如果不存在则进行等待,直到检测到进程PID,中途进程退出抛出异常,键入enter ...

  8. jquery的滚动事件

    $(selector).scroll(function);当滚动到合适的条件下,就触发某个函数. 现在基本就是前端利用AJAX对数据进行拼接操作,渲染进html的DOM结构中.

  9. express 的路由分离

    在做大型项目是一般不会把路由写入server.js里,所以就有了路由分离 1.在项目目录下创建router文件夹 user.js var express = require("express ...

  10. 3.Docker安装【Docker每天5分钟】

    原文:3.Docker安装[Docker每天5分钟] Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制.该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和云 ...