首页 > 代码库 > java http工具类和HttpUrlConnection上传文件分析
java http工具类和HttpUrlConnection上传文件分析
利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式。那么就可以用任何一门语言来模拟浏览器上传文件。下面有几篇文章从http协议入手介绍了java中上传文件.
- Java使用HttpURLConnection上传文件
- 使用HttpUrlConnection进行post请求上传文件
- 封装HttpClient4.3.x包括文件上传
- 使用 HttpClient 4 进行文件上传
- httpclient4教程
下面分享一个自己封装的http工具类(暂不直接支持文件上传)------没有引入任何地三方jar包
1 HttpRequest类
package com.yy.game.risecloud.sdk.common.model;import java.util.Map;/** * http请求类 * * @author zhuhui * */public class HttpRequest { /** * http请求编码,默认UTF-8 */ public String charsetName = RisecloudSdkConstant.CHARSET_NAME; /** * HTTP请求超时时间,默认5000ms */ public int timeout = RisecloudSdkConstant.HTTP_REQUEST_TIMEOUT; /*** * http请求url地址 */ public String url; /*** * http请求方法,只支持GET,POST,PUT,DELETE */ public HttpMethod method; /*** * http请求消息报头 */ public Map<String, String> headers; /** * http请求url参数 */ public Map<String, String> params; /*** * http请求正文内容 */ public String content; public HttpRequest() { } public HttpRequest(String url, HttpMethod method) { this.url = url; this.method = method; } public HttpRequest(String url, HttpMethod method, Map<String, String> headers) { this(url, method); this.headers = headers; } public HttpRequest(String url, HttpMethod method, Map<String, String> headers, Map<String, String> params) { this(url, method, headers); this.params = params; } public HttpRequest(String url, HttpMethod method, Map<String, String> headers, String content) { this(url, method, headers); this.content = content; }}2. HttpResponse类
package com.yy.game.risecloud.sdk.common.model;/** * http响应类 * @author zhuhui * */public class HttpResponse { /** * http响应状态码 */ public int code; /** * 与响应代码一起返回的 HTTP 响应消息 */ public String message; /** * 响应正文内容 */ public String content; public HttpResponse(int code, String message, String content) { this.code = code; this.message = message; this.content = content; }}
3.用到的工具方法(可能直接拷贝有问题,去掉出错的代码就可以了)
package com.yy.game.risecloud.sdk.common.internal;import java.net.URLEncoder;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.UUID;import com.yy.game.risecloud.sdk.common.model.RisecloudSdkConstant;/** * 常用工具类 * * @author zhuhui */public class CommonUtil { private CommonUtil() { } /** * 判断字符串是否为空 * * @param s * @return 如果字符串为空或者字符串去除首尾空格为空字符串则返回true,反之返回false */ public static boolean isEmpty(String s) { if (s == null || s.trim().length() == 0) { return true; } return false; } /** * 判断map是否为空 * * @param map * map对象 * @return 如果map==null或者map.size()==0则返回true,反之返回false */ @SuppressWarnings("all") public static boolean isEmpty(Map map) { if (map == null || map.size() == 0) { return true; } return false; } /*** * 判断list是否为空 * * @param list * list对象 * @return 如果list==null或者list.size==则返回true,反之返回false */ @SuppressWarnings("all") public static boolean isEmpty(List list) { if (list == null || list.size() == 0) { return true; } return false; } /** * 将map转成http url请求参数的格式 * * @param map * @return map为空返回null,反之返回类似name=zhangsan&age=14的这样的格式 */ public static String map2UrlParams(Map<String, String> map) { if (isEmpty(map)) { return null; } StringBuilder sb = new StringBuilder(); for (Entry<String, String> entry : map.entrySet()) { if (!isEmpty(entry.getValue())) { String key = entry.getKey(); try { String value = http://www.mamicode.com/URLEncoder.encode(entry.getValue(), "UTF-8");>4 HttpMethodpackage com.yy.game.risecloud.sdk.common.model;/** * http请求方法枚举类 * * @author zhuhui * */public enum HttpMethod { GET, POST, PUT, DELETE;}5 HttpUtil类package com.yy.game.risecloud.sdk.common.internal;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.Map;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import com.yy.game.risecloud.sdk.common.model.HttpMethod;import com.yy.game.risecloud.sdk.common.model.HttpRequest;import com.yy.game.risecloud.sdk.common.model.HttpResponse;public class HttpUtil { private HttpUtil() { } static HostnameVerifier sslHostnameVerifier; static synchronized void initSslHostnameVerifier() { if (sslHostnameVerifier != null) { return; } sslHostnameVerifier = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { return urlHostName != null && urlHostName.equals(session.getPeerHost()); } }; } static SSLSocketFactory sslSocketFactory; /** * 忽略SSL证书 */ static synchronized void initSslSocketFactory() { if (sslSocketFactory != null) { return; } InputStream in = null; try { SSLContext context = SSLContext.getInstance("TLS"); final X509TrustManager trustManager = new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } }; context.init(null, new TrustManager[] { trustManager }, null); sslSocketFactory = context.getSocketFactory(); } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static HttpURLConnection createConnection(String url) throws Exception { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); if ("https".equalsIgnoreCase(url.substring(0, 5))) { if (sslSocketFactory == null) { initSslSocketFactory(); } ((HttpsURLConnection) conn).setSSLSocketFactory(sslSocketFactory); if (sslHostnameVerifier == null) { initSslHostnameVerifier(); } ((HttpsURLConnection) conn).setHostnameVerifier(sslHostnameVerifier); } conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Connection", "close"); return conn; } public static HttpResponse execute(HttpRequest request) throws Exception { /* 参数检查 */ if (request == null) { throw new IllegalArgumentException("HttpRequest must be not null"); } if (CommonUtil.isEmpty(request.url)) { throw new IllegalArgumentException("HttpRequest url must be not null"); } if (request.timeout < 0) { throw new IllegalArgumentException(String.format("timeout=[%s],HttpRequest timeout must be Greater than zero", request.timeout + "")); } if (request.method == HttpMethod.GET && !CommonUtil.isEmpty(request.content)) { throw new IllegalArgumentException("When Http Method is GET,the HttpRquest content must be null"); } HttpURLConnection connection = null; String url = request.url; try { // 设置url传递参数 if (!CommonUtil.isEmpty(request.params)) { String queryString = CommonUtil.map2UrlParams(request.params); if (!CommonUtil.isEmpty(queryString)) { url = url + "?" + queryString; } } // 获取连接 connection = createConnection(url); connection.setRequestMethod(request.method.toString()); connection.setConnectTimeout(request.timeout); connection.setDoOutput(true); connection.setDoInput(true); // 设置请求头 if (!CommonUtil.isEmpty(request.headers)) { for (Map.Entry<String, String> entry : request.headers.entrySet()) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } } connection.connect(); // 设置请求正文 if (!CommonUtil.isEmpty(request.content)) { DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.write(request.content.getBytes(request.charsetName)); out.close(); } int code = connection.getResponseCode(); String message = connection.getResponseMessage(); StringBuilder result = new StringBuilder(); InputStream in = connection.getErrorStream(); if (in == null) { in = connection.getInputStream(); } if (in != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); char[] cbuf = new char[4096]; while (true) { int len = reader.read(cbuf); if (len < 0) { break; } result.append(cbuf, 0, len); } } return new HttpResponse(code, message, result.toString()); } catch (Exception e) { throw e; } finally { if (connection != null) { connection.disconnect(); } } }}java http工具类和HttpUrlConnection上传文件分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。