/// <summary> /// 上传WWWForm表单的POST,会有 urlencoded 加密支持 /// </summary> /// <returns></returns> public IEnumerator IEnumPostWWWForm() { UnityWebRequest request = UnityWebRequest.Post(url, postDataForm); request.downloadHandler = new DownloadHandlerBuffer(); UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callback?.Invoke(url, request.responseCode, args); callbackByteArr?.Invoke(url, request.responseCode, null, args); callbackStr?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("POST请求失败", request.responseCode, request.error, url, request.isHttpError.ToString(), request.isNetworkError.ToString()); } else { callback?.Invoke(url, request.responseCode, args); callbackByteArr?.Invoke(url, request.responseCode, request.downloadHandler.data, args); callbackStr?.Invoke(url, request.responseCode, request.downloadHandler.text, args); } break; } yield return(new WaitForEndOfFrame()); } request.Dispose(); }
/// <summary> /// 下载Texttasset /// </summary> /// <returns></returns> private IEnumerator IEnumGetTextasset() { if (string.IsNullOrEmpty(this.url)) { yield break; } using (UnityWebRequest request = new UnityWebRequest(url)) { DownloadHandlerBuffer dht = new DownloadHandlerBuffer(); request.timeout = timeout; request.downloadHandler = dht; UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callbackTextasset?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("获取Textasset时网络错误", url, request.responseCode); } else { callbackTextasset?.Invoke(url, request.responseCode, new TextAsset(dht.text), args); } break; } yield return(new WaitForEndOfFrame()); } } }
/// <summary> /// 下载精灵图 /// </summary> /// <returns></returns> private IEnumerator IEnumGetSprite() { if (string.IsNullOrEmpty(this.url)) { yield break; } using (UnityWebRequest request = new UnityWebRequest(url)) { DownloadHandlerTexture dht = new DownloadHandlerTexture(); request.timeout = timeout; request.downloadHandler = dht; UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callbackSprite?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("获取Sprite时网络错误", url, request.responseCode); } else { Sprite sprite = Sprite.Create(dht.texture, new Rect(0, 0, dht.texture.width, dht.texture.height), Vector2.one / 2); sprite.name = Path.GetFileName(url); callbackSprite?.Invoke(url, request.responseCode, sprite, args); } break; } yield return(new WaitForEndOfFrame()); } } }
/// <summary> /// 下载Texture2D /// </summary> /// <returns></returns> private IEnumerator IEnumGetTexture2D() { if (string.IsNullOrEmpty(this.url)) { yield break; } using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(url, false)) { request.timeout = timeout; UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callbackTexture2D?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("获取Texture2D时网络错误", url, request.responseCode); } else { Texture2D t2d = DownloadHandlerTexture.GetContent(request); t2d.name = Path.GetFileName(url); callbackTexture2D?.Invoke(url, request.responseCode, t2d, args); } break; } yield return(new WaitForEndOfFrame()); } } }
/// <summary> /// GET接口 /// </summary> /// <param name="id"></param> /// <param name="url"></param> /// <param name="filter"></param> /// <param name="headers"></param> /// <param name="callback">Action<EventID, long, byte[]>:url, 请求状态码,返回的数据流</param> /// <param name="progress"></param> /// <returns></returns> private IEnumerator IEnumGetByteArr() { if (filter != null) { url += "?"; bool first = false; foreach (var kv in filter) { url += string.Format("{0}{1}={2}", first ? string.Empty : "&", kv.Key, kv.Value); first = true; } } UnityWebRequest request = new UnityWebRequest(url); request.timeout = timeout; request.downloadHandler = new DownloadHandlerBuffer(); if (headers != null) { foreach (var kv in headers) { request.SetRequestHeader(kv.Key, kv.Value); } } UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callbackByteArr?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("GET请求失败", request.responseCode, request.error, url, request.isHttpError.ToString(), request.isNetworkError.ToString()); } else { callbackByteArr?.Invoke(url, request.responseCode, request.downloadHandler.data, args); } break; } yield return(new WaitForEndOfFrame()); } request.Dispose(); }
/// <summary> /// 上传数据流的POST /// </summary> /// <returns></returns> public IEnumerator IEnumPostByteArr() { UnityWebRequest request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST); if (headers != null) { foreach (var kv in headers) { request.SetRequestHeader(kv.Key, kv.Value); } } request.downloadHandler = new DownloadHandlerBuffer(); request.uploadHandler = new UploadHandlerRaw(postDataByteArr); UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callback?.Invoke(url, request.responseCode, args); callbackByteArr?.Invoke(url, request.responseCode, null, args); callbackStr?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("POST请求失败", request.responseCode, request.error, url, request.isHttpError.ToString(), request.isNetworkError.ToString()); } else { callback?.Invoke(url, request.responseCode, args); callbackByteArr?.Invoke(url, request.responseCode, request.downloadHandler.data, args); callbackStr?.Invoke(url, request.responseCode, request.downloadHandler.text, args); } break; } yield return(new WaitForEndOfFrame()); } request.Dispose(); }
/// <summary> /// 下载ab包 /// </summary> /// <returns></returns> private IEnumerator IEnumGetAB() { if (string.IsNullOrEmpty(this.url)) { yield break; } using (UnityWebRequest request = UnityWebRequest.Get(url)) { request.timeout = timeout; UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callbackAb?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("获取数据流时网络错误", url, request.responseCode); } else { AssetBundle ab = AssetBundle.LoadFromMemory(request.downloadHandler.data); // 把ab包的二进制数据放进去 List <object> argsList = new List <object>(); if (args != null && args.Length > 0) { argsList.Add(argsList); } argsList.Add(request.downloadHandler.data); callbackAb?.Invoke(url, request.responseCode, ab, args); } break; } yield return(new WaitForEndOfFrame()); } } }
/// <summary> /// 下载testasset /// </summary> /// <returns></returns> private IEnumerator IEnumGetAudioClip() { if (string.IsNullOrEmpty(this.url)) { yield break; } AudioType at = AudioType.MPEG; string ext = Path.GetExtension(url).ToLower(); // unity仅支持这4种音频格式 switch (ext) { case ".mp3": at = AudioType.MPEG; break; case ".wav": at = AudioType.WAV; break; case ".aiff": at = AudioType.AIFF; break; case ".ogg": at = AudioType.OGGVORBIS; break; } using (UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(url, at)) { request.timeout = timeout; UnityWebRequestAsyncOperation ao = request.SendWebRequest(); while (true) { progress?.Invoke(ao.progress); if (request.isDone) { if (request.isHttpError || request.isNetworkError) { callbackAudio?.Invoke(url, request.responseCode, null, args); LogOperator.AddNetErrorRecord("获取AudioClip时网络错误", url, request.responseCode); } else { AudioClip clip = DownloadHandlerAudioClip.GetContent(request); // 把语音的二进制数据放进去 List <object> argsList = new List <object>(); if (args != null && args.Length > 0) { argsList.AddRange(args); } argsList.Add(request.downloadHandler.data); args = argsList.ToArray(); callbackAudio?.Invoke(url, request.responseCode, clip, args); } break; } yield return(new WaitForEndOfFrame()); } request.Dispose(); } }