ApiHttpClient.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. package com.xunao.effectdemo.net;
  2. import android.content.Context;
  3. import android.util.Base64;
  4. import android.util.Log;
  5. import com.google.gson.Gson;
  6. import com.google.gson.reflect.TypeToken;
  7. import com.xunao.effectdemo.App;
  8. import com.xunao.effectdemo.utils.EncryptUtil;
  9. import com.zhy.http.okhttp.OkHttpUtils;
  10. import com.zhy.http.okhttp.builder.PostStringBuilder;
  11. import com.zhy.http.okhttp.callback.BitmapCallback;
  12. import com.zhy.http.okhttp.callback.StringCallback;
  13. import com.zhy.http.okhttp.cookie.CookieJarImpl;
  14. import com.zhy.http.okhttp.cookie.store.PersistentCookieStore;
  15. import java.io.File;
  16. import java.io.IOException;
  17. import java.net.URLEncoder;
  18. import java.util.Comparator;
  19. import java.util.HashMap;
  20. import java.util.Locale;
  21. import java.util.Map;
  22. import java.util.TreeMap;
  23. import java.util.concurrent.TimeUnit;
  24. import okhttp3.Callback;
  25. import okhttp3.FormBody;
  26. import okhttp3.MediaType;
  27. import okhttp3.OkHttpClient;
  28. import okhttp3.Request;
  29. import okhttp3.Response;
  30. public class ApiHttpClient {
  31. private static String API_URL = "";
  32. public static OkHttpClient client;
  33. public static HashMap<String, String> headers = new HashMap<>();
  34. public static HashMap<String, String> bodys = new HashMap<>();
  35. public static final String MEDIA_TYPE_JSON = "application/json; charset=utf-8";
  36. public static Context mContext;
  37. public ApiHttpClient() {
  38. }
  39. public static OkHttpClient getHttpClient() {
  40. return client;
  41. }
  42. public static void init() {
  43. mContext = App.getInstance();
  44. CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(mContext));
  45. OkHttpClient client = new OkHttpClient.Builder()
  46. .connectTimeout(30, TimeUnit.SECONDS)
  47. .writeTimeout(30, TimeUnit.SECONDS)
  48. .readTimeout(30, TimeUnit.SECONDS)
  49. .followRedirects(true)
  50. .cookieJar(cookieJar)
  51. .retryOnConnectionFailure(true)
  52. .build();
  53. OkHttpUtils.initClient(client);
  54. addHeader("Accept-Language", Locale.getDefault().toString());
  55. addHeader("Accept", MEDIA_TYPE_JSON);
  56. }
  57. public static String getAbsoluteApiUrl(String partUrl) {
  58. // String url = String.format(API_URL, partUrl);
  59. return partUrl;
  60. }
  61. public static String getAbsoluteApiUrl(String partUrl,Map<String, String> params) {
  62. String url = null;
  63. for (String key:params.keySet()){
  64. url = (url==null?"":(url+"&"))+key+"="+params.get(key);
  65. }
  66. Log.e("MyTag","路径:"+url);
  67. return partUrl+"?"+url;
  68. }
  69. public static void get(String partUrl, CSMHttpCallback callback) {
  70. OkHttpUtils
  71. .get()
  72. .url(getAbsoluteApiUrl(partUrl))
  73. .headers(headers)
  74. .build()
  75. .execute(callback);
  76. }
  77. public static void get(String partUrl, Map<String, String> params,CSMHttpCallback callback) {
  78. OkHttpUtils
  79. .get()
  80. .url(getAbsoluteApiUrl(partUrl,params))
  81. .headers(headers)
  82. .build()
  83. .execute(callback);
  84. }
  85. public static void post(String partUrl, CSMHttpCallback callback) {
  86. OkHttpUtils
  87. .post()
  88. .url(getAbsoluteApiUrl(partUrl))
  89. .headers(headers)
  90. .build()
  91. .execute(callback);
  92. }
  93. public static void post(String partUrl, Map<String, String> params, CSMHttpCallback callback) {
  94. try {
  95. // params.put("app_type","android");
  96. // params.put("app_version",BmonsterApplication.version);
  97. addHeader("param", generateSignStr(params));//
  98. String jsonParam = new Gson().toJson(params);
  99. params = new Gson().fromJson(jsonParam, new TypeToken<HashMap<String, String>>(){}.getType());
  100. OkHttpUtils
  101. .post()
  102. .url(getAbsoluteApiUrl(partUrl))
  103. .headers(headers)
  104. .params(params)
  105. .build()
  106. .execute(callback);
  107. } catch (Exception e) {
  108. e.printStackTrace();
  109. }
  110. }
  111. public static void post2(String partUrl, Map<String, String> params,Map<String,String> map, CSMHttpCallback callback) {
  112. try {
  113. // params.put("app_type","android");
  114. // params.put("app_version",BmonsterApplication.version);
  115. // addHeader("post", generateSignStr(params));//
  116. String jsonParam = new Gson().toJson(params);
  117. params = new Gson().fromJson(jsonParam, new TypeToken<HashMap<String, String>>(){}.getType());
  118. FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
  119. // formBody.add("username","zhangsan");//传递键值对参数
  120. OkHttpUtils
  121. .post()
  122. .url(getAbsoluteApiUrl(partUrl))
  123. .headers(headers)
  124. .params(params)
  125. .build()
  126. .execute(callback);
  127. } catch (Exception e) {
  128. e.printStackTrace();
  129. }
  130. }
  131. public static void postBody(String partUrl, Map<String, String> params, MapBodyBean bean, Callback callback){
  132. try {
  133. Gson gson = new Gson();
  134. // 转换层json字符串
  135. final String s = gson.toJson(bean);
  136. // 创建 RequestBody
  137. String msg = generateSignStr(params);
  138. // RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), s);
  139. // Request request = new Request.Builder().url(partUrl).header("param", msg)
  140. // .post(requestBody).build();
  141. FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
  142. formBody.add("speed_list",bean.getSpeed_list());//传递键值对参数
  143. formBody.add("height_list",bean.getHeight_list());//传递键值对参数
  144. formBody.add("location_list",bean.getLocation_list());//传递键值对参数
  145. Request request = new Request.Builder()//创建Request 对象。
  146. .url(partUrl)
  147. .header("param", msg)
  148. .post(formBody.build())//传递请求体
  149. .build();
  150. OkHttpClient okHttpClient1 = OkHttpUtils.getInstance().getOkHttpClient();
  151. okHttpClient1.newCall(request).enqueue(callback);
  152. } catch (Exception e) {
  153. e.printStackTrace();
  154. }
  155. }
  156. public static void post(String partUrl, Map<String, String> params, String fileParamName, File file, CSMHttpCallback callback) {
  157. try {
  158. OkHttpUtils
  159. .post()
  160. .url(getAbsoluteApiUrl(partUrl))
  161. .headers(headers)
  162. .params(params)
  163. .addFile(fileParamName, file.getName(), file)
  164. .build()
  165. .execute(callback);
  166. } catch (Exception e) {
  167. e.printStackTrace();
  168. }
  169. }
  170. public static void postJson(String partUrl, String json, CSMHttpCallback callback) {
  171. OkHttpUtils
  172. .postString()
  173. .url(getAbsoluteApiUrl(partUrl))
  174. .content(json)
  175. .mediaType(MediaType.parse(MEDIA_TYPE_JSON))
  176. .headers(headers)
  177. .build()
  178. .execute(callback);
  179. }
  180. public static void postJsonAsync(String partUrl, String json, BitmapCallback callback) {
  181. PostStringBuilder builder = OkHttpUtils
  182. .postString()
  183. .url(partUrl)
  184. .mediaType(MediaType.parse(MEDIA_TYPE_JSON));
  185. if (json != null) {
  186. builder.content(json);
  187. }
  188. builder.build().execute(callback);
  189. }
  190. public static Response getFormSync(String partUrl) {
  191. try {
  192. Response response = OkHttpUtils
  193. .get()
  194. .url(partUrl)
  195. .build()
  196. .execute();
  197. return response;
  198. } catch (IOException e) {
  199. return null;
  200. }
  201. }
  202. public static void getAsync(String partUrl, StringCallback callback) {
  203. OkHttpUtils
  204. .get()
  205. .url(partUrl)
  206. .build()
  207. .execute(callback);
  208. }
  209. public static void addHeader(String key, String value) {
  210. if (headers.containsKey(key)) {
  211. headers.remove(key);
  212. }
  213. headers.put(key, value);
  214. }
  215. public static void addBodys(String key, String value) {
  216. if (bodys.containsKey(key)) {
  217. bodys.remove(key);
  218. }
  219. bodys.put(key, value);
  220. }
  221. private static String generateSignStr(Map<String, String> params) {
  222. //1、将请求数据按照key字典序排序后的数组
  223. Map<String, String> sortMap = new TreeMap((Comparator<String>) (s, t1) -> s.compareTo(t1));
  224. sortMap.putAll(params);
  225. //2、将所有的请求数据拼接为字符串
  226. StringBuilder sb = new StringBuilder();
  227. for (String value:sortMap.values()) {
  228. sb.append(value);
  229. }
  230. //3、将 $str urlencode 加密
  231. String encodeStr = URLEncoder.encode(sb.toString());
  232. //4、将上面加密的字符串转化为小写
  233. encodeStr = encodeStr.toLowerCase();
  234. //5、转化为小写之后再进行md5加密
  235. String md5Str = EncryptUtil.md5(encodeStr);
  236. //生成signStr之后的请求参数数组
  237. Map<String, Object> map = new HashMap();
  238. map.put("params", sortMap);
  239. map.put("signStr", md5Str);
  240. //6、将请求数组转化为json格式
  241. String json = new Gson().toJson(map);
  242. //将上一步生成的json数据转化为 base64 格式数据
  243. Log.d("json", json);
  244. Log.d("base64", Base64.encodeToString(json.getBytes(), Base64.NO_WRAP));
  245. return Base64.encodeToString(json.getBytes(), Base64.NO_WRAP);
  246. }
  247. }