Example #1
0
        /// <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();
        }
Example #2
0
 /// <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());
         }
     }
 }
Example #3
0
 /// <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());
         }
     }
 }
Example #4
0
 /// <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());
         }
     }
 }
Example #5
0
        /// <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();
        }
Example #6
0
        /// <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();
        }
Example #7
0
 /// <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());
         }
     }
 }
Example #8
0
        /// <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();
            }
        }