UrlConnection doPost Https请求 、编码设置
2017-04-14 18:03
330 查看
UrlConnection doPost Https请求 、编码设置
UrlConnection doPost方法
/** * 发送POST请求 * * @param url 请求地址url * @param params 需要发送的请求参数字符串 * @param connTimeout 连接超时时间(毫秒),如果为null则默认为180秒 * @param readTimeout 读取超时时间(毫秒),如果为null则默认为180秒 * @return 请求响应内容,如果为null则表示请求异常 */ public static String doPost(String url, String params, Integer connTimeout, Integer readTimeout, String contentType) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接,根据url URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", contentType == null? "application/json" : contentType); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 设置请求超时时间和读取超时时间 conn.setConnectTimeout(connTimeout == null ? 180 : connTimeout); conn.setReadTimeout(readTimeout == null ? 180 : readTimeout); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(params); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) result += line; } catch (Exception e) { e.printStackTrace(); result = null; } //使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; }
设置请求和返回数据 utf-8 编码的 doPost 方法
定义请求数据utf-8编码 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8")); 定义返回数据 utf-8编码 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
完整设置编码的doPost方法
/** * 发送POST请求 * * @param url 请求地址url * @param params 需要发送的请求参数字符串 * @param connTimeout 连接超时时间(毫秒),如果为null则默认为180秒 * @param readTimeout 读取超时时间(毫秒),如果为null则默认为180秒 * @return 请求响应内容,如果为null则表示请求异常 */ public static String doPost(String url, String params, Integer connTimeout, Integer readTimeout, String contentType) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接,根据url URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", contentType == null? "application/json" : contentType); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 设置请求超时时间和读取超时时间 conn.setConnectTimeout(connTimeout == null ? 180 : connTimeout); conn.setReadTimeout(readTimeout == null ? 180 : readTimeout); // 获取URLConnection对象对应的输出流,设置utf-8编码 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8")); // 发送请求参数 out.print(params); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应,设置utf-8编码 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); String line; while ((line = in.readLine()) != null) result += line; } catch (Exception e) { e.printStackTrace(); result = null; } //使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; }
兼容http请求和https请求的doPost方法
https请求绕过https验证具体见下方代码
import javax.net.ssl.*; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; /** * Created by DawnHeaven on 16-4-20. */ public class PostUtils { /** * 忽视证书HostName */ private static HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() { public boolean verify(String s, SSLSession sslsession) { //System.out.println("WARNING: Hostname is not matched for cert."); return true; } }; /** * Ignore Certification */ private static TrustManager ignoreCertificationTrustManger = new X509TrustManager() { private X509Certificate[] certificates; public void checkClientTrusted(X509Certificate certificates[], String authType) throws CertificateException { if (this.certificates == null) { this.certificates = certificates; //System.out.println("init at checkClientTrusted"); } } public void checkServerTrusted(X509Certificate[] ax509certificate, String s) throws CertificateException { if (this.certificates == null) { this.certificates = ax509certificate; //System.out.println("init at checkServerTrusted"); } } public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } }; /** * 获取UrlConn */ public static URLConnection geneUrlConn(String urlstr) throws Exception { URL url = new URL(urlstr); if(urlstr.startsWith("https://")){ HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier); HttpsURLConnection httpsConnection = (HttpsURLConnection) url.openConnection(); // Prepare SSL Context TrustManager[] tm = { ignoreCertificationTrustManger }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); httpsConnection.setSSLSocketFactory(ssf); return httpsConnection; } else { return url.openConnection(); } } /** * 发送POST请求 * * @param url 请求地址url * @param params 需要发送的请求参数字符串 * @param connTimeout 连接超时时间(毫秒),如果为null则默认为30秒 * @param readTimeout 读取超时时间(毫秒),如果为null则默认为60秒 * @return 请求响应内容,如果为null则表示请求异常 */ public static String doPost(String url, String params, Integer connTimeout, Integer readTimeout, String contentType) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { // URL realUrl = new URL(url); // 打开和URL之间的连接,根据url URLConnection conn = geneUrlConn(url); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", contentType == null? "application/json" : contentType); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 设置请求超时时间和读取超时时间 conn.setConnectTimeout(connTimeout == null ? 180 : connTimeout); conn.setReadTimeout(readTimeout == null ? 180 : readTimeout); // 获取URLConnection对象对应的输出流 out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8")); // 发送请求参数 out.print(params); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); String line; while ((line = in.readLine()) != null) result += line; } catch (Exception e) { e.printStackTrace(); result = null; } //使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } }
分类: Java
相关文章推荐
- UrlConnection doPost Https请求 、编码设置
- Java https请求 HttpsURLConnection
- 关于JAVA发送Https请求(HttpsURLConnection和HttpURLConnection)
- 关于JAVA发送Https请求(HttpsURLConnection和HttpURLConnection)
- JAVA发送Https请求(HttpsURLConnection和HttpURLConnection)区别
- 使用HttpsURLConnection发送POST请求
- Java https请求 HttpsURLConnection
- 使用HttpURLConnection通过post请求服务器时,URLEncode编码的必要性
- HttpsURLConnection请求https,抛出javax.net.ssl.SSLException: hostname in certificate didn't match:
- 如何设置url为https的请求 ?
- JAVA HTTPS请求 HttpsURLConnection
- 发送设置编码的Url请求
- HttpURLConnection 发送请求编码问题
- HttpsURLConnection实现SSL的GET/POST请求
- HttpURLConnection.setRequestProperty设置请求头
- 使用HttpURLConnection设置请求超时时间,请求超时时会导致自动重发。
- java HttpsURLConnection请求报错
- https HttpsURLConnection请求的单向认证
- HttpURLConnection发送PUT请求,设置请求头参数 json请求体
- Android支持https的处理方式2----HttpURLConnection请求https处理方式