日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android HttpURLConnection Post 参数 (https)

發布時間:2024/4/15 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android HttpURLConnection Post 参数 (https) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明utf-8:

1 public static String CHARSET_UTF8 = HTTP.UTF_8;

eg:登陸請求方法,通過接口返回結果:

1 public static void login(String username, String password, ResponseCallbackHandler responseCallbackHandler) { 2 Map<String, String> params = new HashMap<>(); 3 params.put("username", username); 4 params.put("password", password); 5 post("https:/..../login", params, responseCallbackHandler); 6 }

post請求執行前,網絡判斷,以及url參數轉換:

1 private static void post(final String url, Map<String, String> _params, final ResponseCallbackHandler responseCallbackHandler) { 2 3 if (!NetworkUtils.isNetworkConnected(RunnerApp.getContext())) { 4 if (responseCallbackHandler != null) { 5 responseCallbackHandler.onNetworkError(); 6 responseCallbackHandler.onFinish(); 7 } 8 return; 9 } 10 final String params = map2Url(_params); 11 new Thread(new Runnable() { 12 @Override 13 public void run() { 14 post(url, params, responseCallbackHandler); 15 } 16 }).start(); 17 }

map轉換成string類型的url參數:

1 /** 2 * map轉url參數 3 */ 4 public static String map2Url(Map<String, String> paramToMap) { 5 if (null == paramToMap || paramToMap.isEmpty()) { 6 return null; 7 } 8 StringBuffer url = new StringBuffer(); 9 boolean isfist = true; 10 for (Map.Entry<String, String> entry : paramToMap.entrySet()) { 11 if (isfist) { 12 isfist = false; 13 } else { 14 url.append("&"); 15 } 16 url.append(entry.getKey()).append("="); 17 String value = entry.getValue(); 18 if (!TextUtils.isEmpty(value)) { 19 try { 20 url.append(URLEncoder.encode(value, CHARSET_UTF8)); 21 } catch (UnsupportedEncodingException e) { 22 e.printStackTrace(); 23 } 24 } 25 } 26 return url.toString(); 27 }

post執行:(注:這里簡單的描述了下接口返回參數而已)。

1 /** 2 * post請求 3 */ 4 public static void post(String url, String params, ResponseCallbackHandler responseCallbackHandler) { 5 StringBuffer bufferRes = null; 6 try { 7 HttpURLConnection http = initHttps(url, "POST", null); 8 OutputStream out = http.getOutputStream(); 9 out.write(params.getBytes(CHARSET_UTF8)); 10 out.flush(); 11 out.close(); 12 13 InputStream in = http.getInputStream(); 14 BufferedReader read = new BufferedReader(new InputStreamReader(in, CHARSET_UTF8)); 15 String valueString = null; 16 bufferRes = new StringBuffer(); 17 while ((valueString = read.readLine()) != null) { 18 bufferRes.append(valueString); 19 } 20 in.close(); 21 if (http != null) { 22 http.disconnect();// 關閉連接 23 } 24 if(responseCallbackHandler != null) { 25 responseCallbackHandler.onSuccess(bufferRes.toString()); 26 LogUtils.d(tag, "onSuccess"); 27 LogUtils.d(tag, "onSuccess:" + bufferRes.toString()); 28 } 29 } catch (Exception e) { 30 e.printStackTrace(); 31 if (responseCallbackHandler != null) { 32 responseCallbackHandler.onNetworkError(); 33 } 34 } 35 if (responseCallbackHandler != null) { 36 responseCallbackHandler.onFinish(); 37 } 38 }

實例化HttpURLConnection?post請求時,ssl添加權限:

1 /** 2 * 初始化http請求參數 3 */ 4 private static HttpsURLConnection initHttps(String url, String method, Map<String, String> headers) 5 throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException { 6 TrustManager[] tm = {new CustomX509TrustManager()}; 7 SSLContext sslContext = SSLContext.getInstance("TLSv1"); 8 sslContext.init(null, tm, new java.security.SecureRandom()); 9 // 從上述SSLContext對象中得到SSLSocketFactory對象 10 SSLSocketFactory ssf = sslContext.getSocketFactory(); 11 URL _url = new URL(url); 12 HttpsURLConnection http = (HttpsURLConnection) _url.openConnection(); 13 // 連接超時 14 http.setConnectTimeout(25000); 15 // 讀取超時 --服務器響應比較慢,增大時間 16 http.setReadTimeout(25000); 17 http.setRequestMethod(method); 18 http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 19 http.setRequestProperty("User-Agent", 20 "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36"); 21 if (null != headers && !headers.isEmpty()) { 22 for (Map.Entry<String, String> entry : headers.entrySet()) { 23 http.setRequestProperty(entry.getKey(), entry.getValue()); 24 } 25 } 26 http.setSSLSocketFactory(ssf); 27 http.setDoOutput(true); 28 http.setDoInput(true); 29 http.connect(); 30 return http; 31 }

添加證書管理:

1 // 證書管理 2 class CustomX509TrustManager implements X509TrustManager { 3 4 public X509Certificate[] getAcceptedIssuers() { 5 return null; 6 } 7 8 @Override 9 public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { 10 } 11 12 @Override 13 public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { 14 } 15 }

?

參考:

Android SSL - No Peer Certificate

Javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: Failure in SSL library, usually a protocol error

http請求No peer certificate的解決方法(使用的是HTTPClient)

https 用 HttpsURLConnectio如何登陸 post方式

使用HttpsURLConnection發送POST請求

轉載于:https://www.cnblogs.com/CharlesGrant/p/5088967.html

總結

以上是生活随笔為你收集整理的Android HttpURLConnection Post 参数 (https)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。