声明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)相关推荐

  1. Android httpUrlConnection的基本使用

    今天,简单讲讲Android HttpUrlConnection的使用. 我在项目里是使用OK HTTP的,但是最近发现使用OK HTTP好多不知道的问题,感觉自己对基本的网络请求不是很好的掌握,所以 ...

  2. Android安全加密:Https编程

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名 ...

  3. ExternalDocumentationLinkImpl(url=https://developer.android.com/reference/, packageListUrl=https://d

    dokka 问题 java.lang.RuntimeException: Exception while loading package-list from ExternalDocumentation ...

  4. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  5. Android.mk 配置参数

    Android.mk 的可配置参数会比较多,但是常用的可能很少.在进行多项目 ndk 共享的时候,如果对各个参数比较了解,对项目的结构优化有不小的好处. 0x00 LOCAL_PATH 根据 Andr ...

  6. 云炬Android开发报错处理教程 完美解决Android Studio maven { url ‘https://jitpack.io‘ } 无法下载问题

    有个项目好久没有运行了,这次刚好有个bug要协助调试,由于AndroidStudio已经升级到最新稳定版3.5了,运行项目居然报错(一脸懵逼) Could not GET 'https://jitpa ...

  7. Android 系统(200)---Android build.prop参数详解

    Android build.prop参数详解 前言 build.prop是Android系统中的一个重要的属性文件,它记录了Android系统运行的很多配置信息,当程序运行时需要某种系统状态时,会到该 ...

  8. Android 系统(95)---Android build.prop参数详解

    Android build.prop参数详解 前言 build.prop是Android系统中的一个重要的属性文件,它记录了Android系统运行的很多配置信息,当程序运行时需要某种系统状态时,会到该 ...

  9. Android WebView 加载https网页白屏,空白解决方案

    最近在做一个H5相关的需求,使用WebView加载第三方提供的https网页时显示白屏.但是调试打开Baidu和B站的https网址时就能正常打开.被这个问题困扰了半天. 合作方说是android手机 ...

最新文章

  1. 时间序列预测---差分自回归移动平均模型(ARIMA模型)
  2. php语言与jsp,关于开发语言之PHP JSP与ASP NET对比浅析
  3. php调用百度天气接口,php使用百度天气接口示例
  4. Java中的位移运算符
  5. JSON语法之JSON键/值对
  6. 云服务器 ECS > 快照 > 快照概述
  7. SQL SERVER 2012 只能识别20个CPU的问题
  8. Ajax 学习(一)
  9. 算法学习:蝙蝠算法简介
  10. 使用科来网络分析系统
  11. matlab泊松分布图,matlab画泊松分布图
  12. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解
  13. cesium面积计算_GitHub - BulletYuan/bulletCesium: GIS可视化——基于Cesiumjs的一些工具类,测量距离、测量面积。持续更新......
  14. 基于计算机视觉的梦幻西游辅助脚本(只用于开发学习技术)
  15. 红米note4出厂系统版本_红米Note4官方出厂rom系统刷机包_升级包降级包回退包下载...
  16. CommandBuffer.Blit BuiltinRenderTextureType.CameraTarget为空的问题
  17. 如何切换到老版本的IE浏览器
  18. VUE之Vxe-table动态生成多级表头及后端返回数据的处理
  19. TexStudio内容字体格式设置+公式编写及排版心得
  20. java+mysql基于ssm的校园快递代领系统

热门文章

  1. 关于解决DevExpress用DevExpress patch工具破解后经常弹出试用框的问题
  2. AngularJs ng-route路由详解
  3. 网页 JavaScript的DOM操作
  4. JPG各种输入框样式
  5. 健忘族的大爱,机器人管家Watch Bot提醒你不要丢三落四
  6. 解决webview调用 goBack() 返回上一页自动刷新闪白的情况
  7. 触摸板库tslib的编译和配置
  8. c++ string 与 char 互转 以及base64
  9. 75的写的自己情感经历(转贴自天涯社区)
  10. android 圆角图片