示例#1
0
        /// <summary>
        /// Builds the request message serializing data.
        /// </summary>
        /// <param name="method">HTTP method to use when making the request.</param>
        /// <param name="url">URL to send request message.</param>
        /// <param name="data">Object containing data to be sent.</param>
        /// <param name="headers">Headers of request message.</param>
        /// <param name="options">Advanced request options. See <see cref="HttpRequestOptions"/> for more details.</param>
        /// <returns>The <see cref="HttpRequestMessage"/> object.</returns>
        private HttpRequestMessage BuildRequestMessage(HttpMethodEnum method, string url, object data, NameValueCollection headers, HttpRequestOptions options)
        {
            var requestMessage = new HttpRequestMessage(new HttpMethod(method.ToString()), url)
            {
                Content = Utils.CreateHttpContent(data, options)
            };

            SetRequestHeaders(requestMessage, headers);
            return(requestMessage);
        }
示例#2
0
        private bool Send <TReq, TResp>(TReq req, string portalUrl, out TResp resp, WebHeaderCollection headers, HttpMethodEnum method)
            where TReq : IReqBase
            where TResp : IRespBase
        {
            string reqJson    = JsonConvert.SerializeObject(req);//如果请求体为对象,则需转换成json语句
            string returnJson = null;

            returnJson = SendHttpRequest(portalUrl, reqJson, headers, method.ToString());
            resp       = JsonConvert.DeserializeObject <TResp>(returnJson);
            //入库
            return(resp != null);
        }
示例#3
0
        private static HttpWebRequest CreateHttpRequest(string url, HttpMethodEnum method, int timeout = 5)
        {
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

            if (request != null)
            {
                request.Method = method.ToString();
                //request.ContentType = "application/json; charset=UTF-8";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36";
                request.Timeout   = 3000;

                request.ServicePoint.Expect100Continue = false;
            }
            return(request);
        }
示例#4
0
        public Uri GetUri(Uri baseUrl, string route, HttpMethodEnum method)
        {
            if (!route.EndsWith("/"))
            {
                route = route + "/";
            }
            switch (method)
            {
            case HttpMethodEnum.Create:
                return(new Uri(baseUrl, route + "post"));

            case HttpMethodEnum.Get:
                return(new Uri(baseUrl, route + "get/"));

            case HttpMethodEnum.DeleteByPut:
                return(new Uri(baseUrl, route + "put"));

            case HttpMethodEnum.Update:
                return(new Uri(baseUrl, route + "put"));

            default:
                return(new Uri(baseUrl, route + method.ToString().ToLower()));
            }
        }
示例#5
0
        /// <summary>
        /// 调用远程地址
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="method">请求方式</param>
        /// <param name="postdata">Post数据</param>
        /// <param name="timeout">超时秒数</param>
        /// <param name="proxy">代理</param>
        /// <param name="settings">jsonSerializerSettings</param>
        /// <returns>远程方法返回的内容</returns>
        public static async Task <string> CallAPIAsync(
            string url,
            HttpMethodEnum method = HttpMethodEnum.GET,
            IDictionary <string, string> postdata = null,
            int?timeout  = null,
            string proxy = null,
            JsonSerializerSettings settings = null
            )
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException(nameof(url));
            }

            //  新建http请求
            var request = WebRequest.Create(url) as HttpWebRequest;

            // 如果配置了代理,则使用代理
            if (string.IsNullOrEmpty(proxy) == false)
            {
                request.Proxy = new WebProxy(proxy);
            }

            request.Method = method.ToString();
            // 如果是Post请求,则设置表单
            if (method == HttpMethodEnum.POST || method == HttpMethodEnum.PUT)
            {
                request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
                if (postdata == null || postdata.Count == 0)
                {
                    request.Headers[HttpRequestHeader.ContentLength] = "0";
                }
            }
            request.Headers[HttpRequestHeader.UserAgent] = DEFAULT_USER_AGENT;

            // 设置超时
            if (timeout.HasValue)
            {
                request.ContinueTimeout = timeout.Value;
            }
            request.CookieContainer = _cookieContainer;
            // 填充表单数据
            if (!(postdata == null || postdata.Count == 0))
            {
                var buffer = new StringBuilder();
                var i      = 0;
                foreach (string key in postdata.Keys)
                {
                    if (i > 0)
                    {
                        buffer.AppendFormat("&{0}={1}", key, postdata[key]);
                    }
                    else
                    {
                        buffer.AppendFormat("{0}={1}", key, postdata[key]);
                    }
                    i++;
                }
                var data = Encoding.UTF8.GetBytes(buffer.ToString());
                using (var stream = await request.GetRequestStreamAsync())
                {
                    stream.Write(data, 0, data.Length);
                }
            }


            var res = await request.GetResponseAsync();

            var wsp = (HttpWebResponse)res;

            if (wsp.Cookies != null && wsp.Cookies.Count > 0)
            {
                _cookieContainer = new CookieContainer();
                for (int j = 0; j < wsp.Cookies.Count; j++)
                {
                    _cookieContainer.Add(wsp.Cookies[j]);
                }
            }
            Stream st = null;

            // 如果远程服务器采用了gzip,增进行相应的解压缩
            if (wsp.Headers[HttpResponseHeader.ContentEncoding]?.ToLower().Contains("gzip") == true)
            {
                st = new GZipStream(st, CompressionMode.Decompress);
            }
            else
            {
                st = wsp.GetResponseStream();
            }
            // 设置编码
            var encode = Encoding.UTF8;

            if (!string.IsNullOrEmpty(wsp.Headers[HttpResponseHeader.ContentEncoding]))
            {
                encode = Encoding.GetEncoding(wsp.Headers[HttpResponseHeader.ContentEncoding]);
            }
            // 读取内容
            var sr = new StreamReader(st, encode);
            var ss = sr.ReadToEnd();

            sr.Dispose();
            wsp.Dispose();
            return(ss);
        }
示例#6
0
        /// <summary>
        /// 调用远程地址
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="method">请求方式</param>
        /// <param name="postdata">Post数据</param>
        /// <param name="timeout">超时秒数</param>
        /// <param name="proxy">代理</param>
        /// <returns>远程方法返回的内容</returns>
        public static async Task <string> CallAPI(string url, HttpMethodEnum method = HttpMethodEnum.GET, IDictionary <string, string> postdata = null, int?timeout = null, string proxy = null)
        {
            try
            {
                if (string.IsNullOrEmpty(url))
                {
                    return(string.Empty);
                }
                //新建http请求
                var request = WebRequest.Create(url) as HttpWebRequest;
                //如果配置了代理,则使用代理
                if (string.IsNullOrEmpty(proxy) == false)
                {
                    request.Proxy = new WebProxy(proxy);
                }

                request.Method = method.ToString();
                //如果是Post请求,则设置表单
                if (method == HttpMethodEnum.POST || method == HttpMethodEnum.PUT)
                {
                    if (postdata.ContainsKey("content-type"))
                    {
                        request.ContentType = postdata["content-type"];
                    }
                    else
                    {
                        request.ContentType = "application/x-www-form-urlencoded";
                    }
                    if (postdata == null || postdata.Count == 0)
                    {
                        request.ContentLength = 0;
                    }
                }
                request.UserAgent = DefaultUserAgent;
                //设置超时
                if (timeout.HasValue)
                {
                    request.ContinueTimeout = timeout.Value;
                }
                request.CookieContainer = new CookieContainer();
                //填充表单数据
                if (!(postdata == null || postdata.Count == 0))
                {
                    var buffer = new StringBuilder();
                    var i      = 0;
                    foreach (string key in postdata.Keys)
                    {
                        if (i > 0)
                        {
                            buffer.AppendFormat("&{0}={1}", key, postdata[key]);
                        }
                        else
                        {
                            buffer.AppendFormat("{0}={1}", key, postdata[key]);
                        }
                        i++;
                    }
                    var data = Encoding.UTF8.GetBytes(buffer.ToString());
                    using (var stream = await request.GetRequestStreamAsync())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                }


                var res = await request.GetResponseAsync();

                var    wsp = (HttpWebResponse)res;
                Stream st  = null;
                //如果远程服务器采用了gzip,增进行相应的解压缩
                if (wsp.Headers[HttpResponseHeader.ContentEncoding]?.ToLower().Contains("gzip") == true)
                {
                    st = new GZipStream(st, CompressionMode.Decompress);
                }
                else
                {
                    st = wsp.GetResponseStream();
                }
                //设置编码
                var encode = Encoding.UTF8;
                if (!string.IsNullOrEmpty(wsp.Headers[HttpResponseHeader.ContentEncoding]))
                {
                    encode = Encoding.GetEncoding(wsp.Headers[HttpResponseHeader.ContentEncoding]);
                }
                //读取内容
                var sr = new StreamReader(st, encode);
                var ss = sr.ReadToEnd();
                sr.Dispose();
                wsp.Dispose();
                return(ss);
            }
            catch (Exception ex)
            {
                //返回失败信息
                ListItemModel rv = new ListItemModel()
                {
                    Text  = ex.Message,
                    Value = ex.StackTrace
                };
                return(HttpUtility.UrlDecode(JsonSerializer.Serialize(rv)));
            }
        }
示例#7
0
 public async Task Download(string url, object data, HttpMethodEnum method = HttpMethodEnum.POST)
 {
     await JSRuntime.InvokeVoidAsync("urlFuncs.download", url, JsonSerializer.Serialize(data), method.ToString());
 }