Http请求工具类(Java原生Form+Json)
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)的更多相关文章
- java jdk原生的http请求工具类
package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...
- java模板模式项目中使用--封装一个http请求工具类
需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 远程Get,Post请求工具类
1.远程请求工具类 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...
- ajax请求工具类
ajax的get和post请求工具类: /** * 公共方法类 * * 使用 变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...
- 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类
下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...
- C# http请求工具类
/// <summary> /// Http请求操作类之HttpWebRequest /// </summary> public class HttpHelper { #reg ...
- Http请求工具类 httputil
package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import j ...
随机推荐
- Office GVLK 密钥对照表(kms激活专用)
Office2016系列: Office Professional Plus 2016:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 Office Standard 2016:JNRGM ...
- 将二级目录下的文件合并成一个文件的Python小脚本
这个小程序的目的是将二级目录下的文件全部合并成一个文件(其实几级目录都可以,只要做少许改动) #coding:utf8 import sys, os def process(path): new_fi ...
- MFC CListctr显示缩略图
我们知道通过CImageList可以让listctr显示出图片,但是添加的图片大小必须和要CImageList 创建的图片大小一致,才能显示出来.最近遇到一个需求,需要把很多大小不一的jpeg图片通过 ...
- 18/9/9牛客网提高组Day1
牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30% qwq #include<algorithm> #in ...
- 前端面试题(HTML/CSS)
(前端面试题大全,持续更新) 常用的块级元素和行内元素有哪些?说说他们的特点? 浮动产生的原因?清除浮动? 说说一下盒模型 float和position一起用是什么效果 rem用过吗?做不同手机的适配 ...
- web自动化测试 Selenium2 Java自动化测试实战9_3
driver.findElement(By.id("idInput")).sendKeys("哈哈"); driver.findElement(By.id(&q ...
- MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别
MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性 ...
- 关于C++中用两个迭代器方式初始化string的知识
string(iter1, iter2); 第一点:两个迭代器必须指向同一个容器. 第二点:iter2必须>=iter1. 第三点:假设iter1等于iter2,那么结果为空[] 另外一个比較特 ...
- android String 类型转换成UTF-8格式
在android开发中,有时候会遇到汉字乱码的问题,在这个时候,吧String串加一个编码格式转换,转换成UTF-8的格式就可以了 public static String toUtf8(String ...
- 字符集和编码II: fat/msdos/vfat (文件名乱码的问题)
具体到文件名乱码的问题,需要明确两点 第一,文件名作为一个字符串,需要被编码后存入文件系统: 第二,Linux内核无非是个特殊的应用程序,它读取文件名,再把文件名以编码后的形式传递出去. 但Linux ...