HttpTool.cs 15 KB

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