Example #1
0
        /// <summary>
        /// 异步Get请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="callBack"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public static async Task GetAsync(string url, HttpResponseHandler callBack = null,
                                          double?timeout = null)
        {
            url = NetHelper.FormatRequestUrl(url);

            HttpResponse responseMsg = null;

            // 单机测试,使用FakeData生成随机测试数据模拟网络访问
            if (AppRunConfigs.Instance.IsSingleTestMode)
            {
                var genTypes = callBack.Method.GetGenericArguments();
                SAssert.MustTrue(genTypes.Length == 1, string.Format("非法的泛型回调在PostAsync {0}", genTypes));
                callBack?.Invoke(ClientFakeDataHelper.Instance.CreateFakeDataNetResponse(genTypes[0]), null);
                return;
            }

            SLogger.Info($"Start Get AsyncRequest\nUrl:{url}\n");

            try
            {
                //SetNetDALTimeout(timeout);

                var httpResponse = await s_asyncWebClient.GetAsync(url, HttpCompletionOption.ResponseContentRead);

                string responseContent = null;

                if (httpResponse.IsSuccessStatusCode)
                {
                    var resultStr = await httpResponse.Content.ReadAsStringAsync();

                    responseContent = resultStr;
                }

                responseMsg = new HttpResponse(responseContent, httpResponse.StatusCode);
            }
            catch (HttpRequestException ex)
            {
                //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed);
                responseMsg             = new HttpResponse("网络请求异常", HttpStatusCode.ExpectationFailed);
                responseMsg.ResponseMsg = ex.ToString();
            }
            catch (Exception ex)
            {
                //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed);
                responseMsg             = new HttpResponse("系统异常", HttpStatusCode.ExpectationFailed);
                responseMsg.ResponseMsg = ex.ToString();
            }
            finally
            {
                callBack?.Invoke(responseMsg, null);
            }
        }
Example #2
0
        public async Task HttpGetStreamInvokeAsync(string url, IEnumerable <Header> headers, TimeSpan timeOut, HttpResponseHandler httpResponseHandler)
        {
            using (var httpClient = new HttpClient())
            {
                headers.ToList().ForEach(h => { httpClient.DefaultRequestHeaders.Add(h.Key, h.Value); });

                HttpResponseMessage httpResponse = await httpClient.GetAsync(url);

                string respBody = await httpResponse.Content.ReadAsStringAsync();

                List <Header> responseHeaders = new List <Header>();
                responseHeaders.AddRange(
                    httpResponse.Headers.Select(c =>
                {
                    return(Header.CreateHeader(c.Key, c.Value));
                }));
                List <Header> responseContentHeaders = new List <Header>();
                responseContentHeaders.AddRange(
                    httpResponse.Content.Headers.Select(c =>
                {
                    return(Header.CreateHeader(c.Key, c.Value));
                }));

                httpResponseHandler?.Invoke(this,
                                            new HttpInvokerResponseArgs(new HttpInvokerResponse(httpResponse.StatusCode,
                                                                                                httpResponse.ReasonPhrase, responseHeaders, responseContentHeaders, String.Empty, true)));
            }
        }
Example #3
0
        public async Task HttpPostInvoke(string url, IEnumerable <Header> headers, IEnumerable <Header> contentHeader,
                                         Dictionary <string, string> postParameters, TimeSpan timeOut,
                                         HttpResponseHandler httpResponseHandler)
        {
            // Build the form data (exclude OAuth stuff that's already in the
            // header).
            var formData = new FormUrlEncodedContent(postParameters);

            contentHeader.ToList().ForEach(h => { formData.Headers.Add(h.Key, h.Value); });
            using (var httpClient = new HttpClient())
            {
                headers.ToList().ForEach(h => { httpClient.DefaultRequestHeaders.Add(h.Key, h.Value); });

                HttpResponseMessage httpResponse = await httpClient.PostAsync(url, formData);

                string respBody = await httpResponse.Content.ReadAsStringAsync();

                List <Header> responseHeaders = new List <Header>();
                responseHeaders.AddRange(
                    httpResponse.Headers.Select(c =>
                {
                    return(Header.CreateHeader(c.Key, c.Value));
                }));
                List <Header> responseContentHeaders = new List <Header>();
                responseContentHeaders.AddRange(
                    httpResponse.Content.Headers.Select(c =>
                {
                    return(Header.CreateHeader(c.Key, c.Value));
                }));

                httpResponseHandler?.Invoke(this,
                                            new HttpInvokerResponseArgs(new HttpInvokerResponse(httpResponse.StatusCode,
                                                                                                httpResponse.ReasonPhrase, responseHeaders, responseContentHeaders, String.Empty, true)));
            }
        }
Example #4
0
        /// <summary>
        /// 异步POST请求
        /// TOFIX:待添加超时逻辑
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <param name="callBack"></param>
        /// <param name="timeout"></param>
        public static async Task PostAsync <T>(string url, T param          = null,
                                               HttpResponseHandler callBack = null, double?timeout = null)
            where T : class, new()
        {
            // 单机测试,使用FakeData生成随机测试数据模拟网络访问
            if (AppRunConfigs.Instance.IsSingleTestMode)
            {
                var genTypes = callBack.Method.GetGenericArguments();
                SAssert.MustTrue(genTypes.Length == 1, string.Format("非法的泛型回调在PostAsync {0}", genTypes));
                var genType = genTypes[0];
                var genNum  = -1;
                if (genType.IsAssignableFrom(typeof(BaseOpResult)))
                {
                    genNum = 1;
                }
                // 生成随机等待时间,模拟网络请求耗时
                var randomGenDataCostTime = FakeDataHelper.Instance.GenRandomInt(AppRunConfigs.Instance.DefaultRequestTimeout);
                // 模拟1/2的请求是要等待长时间,而另外1/2的请求等待短时间
                if (randomGenDataCostTime <= AppRunConfigs.Instance.DefaultRequestTimeout / 2)
                {
                    randomGenDataCostTime = 300;
                }
                await Task.Delay(randomGenDataCostTime);

                // FIXME:目前超时情况下,没有关掉该网络请求,会导致提示了网路请求超时错误之后,仍然会返回数据结果(正确应该中断这次请求!)
                callBack?.Invoke(ClientFakeDataHelper.Instance.CreateFakeDataNetResponse(genType, genNum), null);
                return;
            }

            HttpContent requestContent = null;

            if (null != param)
            {
                var strJson = JsonHelper.SerializeTo(param);

                requestContent = new StringContent(strJson);

                requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            }

            await PostContentAsync(url, requestContent, callBack, timeout);
        }
Example #5
0
    private static IEnumerator CreateCoroutine(string method, string url, Dictionary <string, string> headers, byte[] body, HttpResponseHandler handler)
    {
        var request = new UnityWebRequest(url, method);

        if (headers != null)
        {
            foreach (var item in headers)
            {
                request.SetRequestHeader(item.Key, item.Value);
            }
        }

        if (body != null)
        {
            request.uploadHandler = new UploadHandlerRaw(body);
        }
        request.downloadHandler = new DownloadHandlerBuffer();

        yield return(request.SendWebRequest());

        handler?.Invoke((int)request.responseCode, request.downloadHandler.text, request.downloadHandler.data);
    }
Example #6
0
        private async Task HttpStreamInvokeAsync(string url, HttpMethod httpMethod, IEnumerable <Header> headers,
                                                 IEnumerable <Header> contentHeaders, HttpInvocationCompletionOption httpInvocationCompletetionOption,
                                                 string postParameters, TimeSpan timeOut, HttpResponseHandler httpResponseHandler,
                                                 CancellationToken cancellationToken)
        {
            postParameters = postParameters ?? String.Empty;
            byte[] bufferPostParameters = Encoding.UTF8.GetBytes(postParameters);

            using (StreamContent streamContent = new StreamContent(new MemoryStream(bufferPostParameters)))
            {
                if (httpMethod == HttpMethod.Post)
                {
                    contentHeaders.ToList().ForEach(h => { streamContent.Headers.Add(h.Key, h.Value); });
                }

                using (HttpClient httpClient = new HttpClient())
                {
                    httpClient.Timeout = timeOut;
                    headers.ToList().ForEach(h => { httpClient.DefaultRequestHeaders.Add(h.Key, h.Value); });
                    httpClient.BaseAddress = new Uri(url);

                    var request = new HttpRequestMessage(httpMethod, url);

                    if (httpMethod == HttpMethod.Post)
                    {
                        request.Content = streamContent;
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    await httpClient.SendAsync(request, (HttpCompletionOption)httpInvocationCompletetionOption)
                    .ContinueWith(async responseTask =>
                    {
                        using (HttpResponseMessage response = responseTask.Result)
                        {
                            await response.Content.ReadAsStreamAsync().ContinueWith(streamTask =>
                            {
                                using (StreamReader streamReader = new StreamReader(streamTask.Result))
                                {
                                    List <Header> responseHeaders = new List <Header>();
                                    responseHeaders.AddRange(
                                        response.Headers.Select(c => { return(Header.CreateHeader(c.Key, c.Value)); }));
                                    List <Header> responseContentHeaders = new List <Header>();
                                    responseContentHeaders.AddRange(
                                        response.Content.Headers.Select(c => { return(Header.CreateHeader(c.Key, c.Value)); }));
                                    try
                                    {
                                        while (!streamReader.EndOfStream && !cancellationToken.IsCancellationRequested)
                                        {
                                            if (httpResponseHandler != null)
                                            {
                                                string json = streamReader.ReadLine();

                                                httpResponseHandler(this,
                                                                    new HttpInvokerResponseArgs(new HttpInvokerResponse(response.StatusCode,
                                                                                                                        response.ReasonPhrase, headers, contentHeaders, json, false)));
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Exception e = ex;
                                    }
                                    finally
                                    {
                                        if (!cancellationToken.IsCancellationRequested)
                                        {
                                            httpResponseHandler?.Invoke(this,
                                                                        new HttpInvokerResponseArgs(new HttpInvokerResponse(response.StatusCode,
                                                                                                                            response.ReasonPhrase, headers, contentHeaders, String.Empty, true)));
                                        }
                                    }
                                }
                            });
                        }
                    });
                }
            }
        }
Example #7
0
        /// <summary>
        /// 异步POST请求
        /// TOFIX:待添加超时逻辑
        /// </summary>
        /// <param name="url"></param>
        /// <param name="content"></param>
        /// <param name="callBack"></param>
        /// <param name="timeout"></param>
        public static async Task PostContentAsync(string url, HttpContent content,
                                                  HttpResponseHandler callBack, double?timeout = null)
        {
            url = NetHelper.FormatRequestUrl(url);

            HttpResponse responseMsg = null;

            var requestDTO = new WebReqResStatisticsDTO()
            {
                RequestFullUrl = url,
                Method         = "POST",
                InTime         = DateTime.Now,
                RequestBody    = content?.ToString(),
            };

            try
            {
                //SetNetDALTimeout(timeout);
                if (null == callBack)
                {
                    // 无回调请求,可以优化成发送之后就不管了
                    await s_asyncWebClient.PostAsync(url, content);

                    return;
                }

                var httpResponse = await s_asyncWebClient.PostAsync(url, content);

                string responseContent = null;

                if (httpResponse.IsSuccessStatusCode)
                {
                    string resultStr = await httpResponse.Content.ReadAsStringAsync();

                    responseContent = resultStr;
                }

                requestDTO.ResponseBody = responseContent;
                requestDTO.OutTime      = DateTime.Now;
                requestDTO.Cost         = (long)(requestDTO.OutTime - requestDTO.InTime).TotalMilliseconds;

                responseMsg = new HttpResponse(responseContent, httpResponse.StatusCode);
            }
            catch (HttpRequestException ex)
            {
                //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed);
                responseMsg             = new HttpResponse("网络请求异常", HttpStatusCode.ExpectationFailed);
                responseMsg.ResponseMsg = ex.ToString();
            }
            catch (Exception ex)
            {
                //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed);
                responseMsg             = new HttpResponse("系统异常", HttpStatusCode.ExpectationFailed);
                responseMsg.ResponseMsg = ex.ToString();
            }
            finally
            {
                SLogger.Debug(JsonHelper.SerializeTo(requestDTO));
                callBack?.Invoke(responseMsg, null);
            }
        }