HttpTool.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using UnityEngine.Networking;
  6. using System.Text;
  7. using System.Security.Cryptography;
  8. using System.Net;
  9. using System.IO;
  10. using Newtonsoft.Json.Linq;
  11. /// <summary>
  12. /// Http Request SDK
  13. /// </summary>
  14. public class HttpTool : MonoSingleton<HttpTool>
  15. {
  16. // private string baseUrl = "http://office.ghz-tech.com:3425/guideSystem";
  17. private string baseUrl = "http://office.ghz-tech.com:9904/api";
  18. private string token = "";
  19. Dictionary<string, string> requestHeader = new Dictionary<string, string>(); // header
  20. void Awake()
  21. {
  22. //http header 的内容
  23. requestHeader.Add("Content-Type", "application/json");
  24. }
  25. public string Token
  26. {
  27. get { return token; }
  28. }
  29. public string BaseUrl
  30. {
  31. get { return baseUrl; }
  32. }
  33. public Dictionary<string, string> RequestHeader
  34. {
  35. get { return requestHeader; }
  36. }
  37. public void Get(string baseUrl, string methodName, Action<string> callback)
  38. {
  39. StartCoroutine(GetRequestErnieBot(baseUrl, methodName, callback));
  40. }
  41. private IEnumerator GetRequestErnieBot(string baseUrl, string methodName, Action<string> callback)
  42. {
  43. string url = baseUrl + methodName;
  44. Debug.Log(url);
  45. using(UnityWebRequest webRequest = UnityWebRequest.Get(url))
  46. {
  47. webRequest.SetRequestHeader("authorization", token);
  48. //设置header
  49. foreach (var v in requestHeader)
  50. {
  51. webRequest.SetRequestHeader(v.Key, v.Value);
  52. }
  53. yield return webRequest.SendWebRequest();
  54. if (webRequest.isHttpError || webRequest.isNetworkError)
  55. {
  56. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text);
  57. if (callback != null)
  58. {
  59. callback(null);
  60. }
  61. }
  62. else
  63. {
  64. if (callback != null)
  65. {
  66. callback(webRequest.downloadHandler.text);
  67. }
  68. }
  69. }
  70. }
  71. public void Get(string methodName, Action<string> callback)
  72. {
  73. StartCoroutine(GetRequest(methodName, callback));
  74. }
  75. private IEnumerator GetRequest(string methodName, Action<string> callback)
  76. {
  77. // string url = Application.streamingAssetsPath + methodName;
  78. string url = baseUrl + methodName;
  79. Debug.Log(url);
  80. using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
  81. {
  82. webRequest.SetRequestHeader("authorization", token);
  83. //设置header
  84. foreach (var v in requestHeader)
  85. {
  86. webRequest.SetRequestHeader(v.Key, v.Value);
  87. }
  88. yield return webRequest.SendWebRequest();
  89. if (webRequest.isHttpError || webRequest.isNetworkError)
  90. {
  91. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text);
  92. if (callback != null)
  93. {
  94. callback(null);
  95. }
  96. }
  97. else
  98. {
  99. if (callback != null)
  100. {
  101. callback(webRequest.downloadHandler.text);
  102. }
  103. }
  104. }
  105. }
  106. public void GetAPI(string url ,Action<string> callback)
  107. {
  108. StartCoroutine(GetAPIRequest(url, callback));
  109. }
  110. private IEnumerator GetAPIRequest(string url, Action<string> callback)
  111. {
  112. // string url = Application.streamingAssetsPath + methodName;
  113. using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
  114. {
  115. //webRequest.SetRequestHeader("authorization", token);
  116. //设置header
  117. //foreach (var v in requestHeader)
  118. //{
  119. // webRequest.SetRequestHeader(v.Key, v.Value);
  120. //}
  121. yield return webRequest.SendWebRequest();
  122. if (webRequest.isHttpError || webRequest.isNetworkError)
  123. {
  124. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text);
  125. if (callback != null)
  126. {
  127. callback(null);
  128. }
  129. }
  130. else
  131. {
  132. if (callback != null)
  133. {
  134. callback(webRequest.downloadHandler.text);
  135. }
  136. }
  137. }
  138. }
  139. public void PostTest(string methodName, string jsonString, Action<string> CallBack)
  140. {
  141. StartCoroutine(PostRequestTest(methodName, jsonString, CallBack));
  142. }
  143. private IEnumerator PostRequestTest(string methodName, string jsonString, Action<string> CallBack)
  144. {
  145. string url = baseUrl + methodName;
  146. Debug.Log(url + jsonString);
  147. using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
  148. {
  149. byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString);
  150. webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
  151. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  152. webRequest.SetRequestHeader("authorization", token);
  153. foreach (var v in requestHeader)
  154. {
  155. webRequest.SetRequestHeader(v.Key, v.Value);
  156. Debug.Log(v.Value + " " + methodName);
  157. }
  158. yield return webRequest.SendWebRequest();
  159. if (webRequest.isHttpError || webRequest.isNetworkError)
  160. {
  161. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text + "\n" + methodName);
  162. CallBack?.Invoke("UnityWebRequest Error");
  163. //GameManager.Instance.text2.text = webRequest.error;
  164. }
  165. else
  166. {
  167. Debug.Log(webRequest.downloadHandler.text);
  168. CallBack(webRequest.downloadHandler.text);
  169. }
  170. }
  171. }
  172. public void PostSnInfo(string methodName, string jsonString, int index, Action<int, string> CallBack)
  173. {
  174. StartCoroutine(PostnInfoRequest(methodName, jsonString, index, CallBack));
  175. }
  176. public IEnumerator PostnInfoRequest(string methodName, string jsonString, int index, Action<int, string> CallBack)
  177. {
  178. string url = baseUrl + methodName;
  179. Debug.Log(url);
  180. using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
  181. {
  182. byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString);
  183. webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
  184. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  185. webRequest.SetRequestHeader("authorization", token);
  186. foreach (var v in requestHeader)
  187. {
  188. webRequest.SetRequestHeader(v.Key, v.Value);
  189. Debug.Log(v.Value + " " + methodName);
  190. }
  191. yield return webRequest.SendWebRequest();
  192. if (webRequest.isHttpError || webRequest.isNetworkError)
  193. {
  194. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text + "\n" + methodName);
  195. //GameManager.Instance.text2.text = webRequest.error;
  196. }
  197. else
  198. {
  199. Debug.Log(webRequest.downloadHandler.text);
  200. CallBack(index, webRequest.downloadHandler.text);
  201. }
  202. }
  203. }
  204. public IEnumerator PostRequestSpoitDetail(string methodName, string jsonString, Action<string> CallBack)
  205. {
  206. string url = baseUrl + methodName;
  207. Debug.Log(url);
  208. using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
  209. {
  210. byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString);
  211. webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
  212. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  213. webRequest.SetRequestHeader("authorization", token);
  214. foreach (var v in requestHeader)
  215. {
  216. webRequest.SetRequestHeader(v.Key, v.Value);
  217. Debug.Log(v.Value + " " + methodName);
  218. }
  219. yield return webRequest.SendWebRequest();
  220. if (webRequest.isHttpError || webRequest.isNetworkError)
  221. {
  222. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text + "\n" + methodName);
  223. //GameManager.Instance.text2.text = webRequest.error;
  224. }
  225. else
  226. {
  227. Debug.Log(webRequest.downloadHandler.text);
  228. CallBack(webRequest.downloadHandler.text);
  229. }
  230. }
  231. }
  232. public void Post(string methodName, string jsonString, Action<string> CallBack)
  233. {
  234. StartCoroutine(PostRequest(methodName, jsonString, CallBack));
  235. }
  236. //
  237. private IEnumerator PostRequest(string methodName, string jsonString, Action<string> CallBack)
  238. {
  239. string url = baseUrl + methodName;
  240. //Debug.Log(url);
  241. using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
  242. {
  243. byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString);
  244. webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
  245. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  246. webRequest.SetRequestHeader("authorization", token);
  247. foreach (var v in requestHeader)
  248. {
  249. webRequest.SetRequestHeader(v.Key, v.Value);
  250. //Debug.Log(v.Value + " " + methodName);
  251. }
  252. yield return webRequest.SendWebRequest();
  253. if (webRequest.isHttpError || webRequest.isNetworkError)
  254. {
  255. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text + "\n" + methodName);
  256. //GameManager.Instance.text2.text = webRequest.error;
  257. }
  258. else
  259. {
  260. //Debug.Log(webRequest.downloadHandler.text);
  261. CallBack(webRequest.downloadHandler.text);
  262. }
  263. }
  264. }
  265. public void GetAllMaterials(string methodName, string jsonString, Action<String> CallBack)
  266. {
  267. StartCoroutine(GetRequest(methodName, jsonString, CallBack));
  268. }
  269. private IEnumerator GetRequest(string methodName, string jsonString, Action<String> CallBack)
  270. {
  271. string url = baseUrl + methodName;
  272. Debug.Log(url);
  273. token = jsonString;
  274. HeadAddToken(token);
  275. using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
  276. {
  277. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  278. webRequest.SetRequestHeader("authorization", jsonString);
  279. foreach (var v in requestHeader)
  280. {
  281. Debug.Log(v.Key + " " + v.Value);
  282. webRequest.SetRequestHeader(v.Key, v.Value);
  283. }
  284. yield return webRequest.SendWebRequest();
  285. if (webRequest.isHttpError || webRequest.isNetworkError)
  286. {
  287. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text);
  288. }
  289. else
  290. {
  291. Debug.Log(webRequest.downloadHandler.text);
  292. CallBack(webRequest.downloadHandler.text);
  293. }
  294. }
  295. }
  296. /// <summary>
  297. /// 登录
  298. /// </summary>
  299. /// <param name="methodName"></param>
  300. /// <param name="jsonString"></param>
  301. /// <param name="CallBack"></param>
  302. public void PostLogin(string methodName, string jsonString, Action<string> CallBack)
  303. {
  304. StartCoroutine(PostRequestLogin(methodName, jsonString, CallBack));
  305. }
  306. private IEnumerator PostRequestLogin(string methodName, string jsonString, Action<string> CallBack)
  307. {
  308. string url = baseUrl + methodName;
  309. Debug.Log(url);
  310. using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
  311. {
  312. byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString);
  313. webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
  314. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  315. foreach (var v in requestHeader)
  316. {
  317. webRequest.SetRequestHeader(v.Key, v.Value);
  318. }
  319. yield return webRequest.SendWebRequest();
  320. if (webRequest.isHttpError || webRequest.isNetworkError)
  321. {
  322. Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text);
  323. string error = webRequest.downloadHandler.text;
  324. JObject jObject = JObject.Parse(error);
  325. CallBack(jObject["message"].ToString());
  326. }
  327. else
  328. {
  329. Debug.Log(webRequest.downloadHandler.text);
  330. var mes = webRequest.downloadHandler.text;
  331. JObject obj = JObject.Parse(mes);
  332. if (obj["code"].ToString() == "200")
  333. {
  334. //Debug.Log(obj["data"]["token"].ToString());
  335. token = obj["data"]["token"].ToString();
  336. Debug.Log(mes);
  337. }
  338. CallBack(mes);
  339. }
  340. }
  341. }
  342. ///// <summary>
  343. ///// 获取本地Sprite
  344. ///// </summary>
  345. ///// <param name="mObj"></param>
  346. ///// <param name="CallBack"></param>
  347. //public void GetLocalSprite(DownLoadMaterial mObj, Action<DownLoadMaterial, object> CallBack)
  348. //{
  349. // StartCoroutine(GetSpriteRequest(mObj, CallBack));
  350. //}
  351. //private IEnumerator GetSpriteRequest(DownLoadMaterial mObj, Action<DownLoadMaterial, object> CallBack)
  352. //{
  353. // UnityWebRequest request = UnityWebRequestTexture.GetTexture(mObj.mObj.localSavePath);
  354. // yield return request.SendWebRequest();
  355. // if (request.isNetworkError || request.isHttpError)
  356. // {
  357. // Debug.LogError(request.error);
  358. // }
  359. // else
  360. // {
  361. // Texture2D texture = DownloadHandlerTexture.GetContent(request);
  362. // Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
  363. // CallBack(mObj, sprite);
  364. // // LoadManager.Instance.DownLoadEnd(mObj, sprite);
  365. // }
  366. //}
  367. public void HeadAddToken(string token)
  368. {
  369. requestHeader.Add("x-token", token);
  370. }
  371. public string GetMd5Hash(string strToEncrypt)
  372. {
  373. MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
  374. byte[] bytes = Encoding.ASCII.GetBytes(strToEncrypt);
  375. byte[] encoded = md5.ComputeHash(bytes);
  376. StringBuilder sb = new StringBuilder();
  377. for (int i = 0; i < 10; i++)
  378. {
  379. sb.Append(encoded[i].ToString("x2"));
  380. }
  381. string password = sb.ToString();
  382. password = password.Substring(0, 10);
  383. return password;
  384. }
  385. }