Exemple #1
0
        public void SendRequest(RequestEnum req)
        {
            try
            {
                switch (req)
                {
                    case RequestEnum.Add:
                        {
                            //this.SendRequestToAddFile();
                            this.SendFileDict();
                            break;
                        }

                    case RequestEnum.Download:
                        {
                            break;
                        }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }
        /// <summary>
        /// Http请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="requestParams"></param>
        /// <param name="requestType"></param>
        /// <param name="cookieContainer"></param>
        /// <param name="referer"></param>
        /// <param name="contentType"></param>
        /// <param name="accept"></param>
        /// <param name="isNeedSleep"></param>
        /// <param name="host"></param>
        /// <returns></returns>
        public static DataResult <string> QueryRequest(string url, string requestParams = "", RequestEnum requestType = RequestEnum.GET, CookieContainer cookieContainer = null, string referer = "", string contentType = "", string accept = "", bool isNeedSleep = false, string host = "")
        {
            var dataResult = new DataResult <string>();

            var retryCount = 2;

            if (!string.IsNullOrWhiteSpace(host) && isEnanbleProxy)
            {
                if (!WebProxyIsEnable(host))
                {
                    dataResult.IsSuccess = false;

                    dataResult.Code = ResultCodeEnum.ProxyDisable;

                    dataResult.ErrorMsg = host;

                    return(dataResult);
                }
            }

            if (isNeedSleep)
            {
                SpinWait.SpinUntil(() => false, TimeSpan.FromSeconds(new Random().Next(1, 2)));
            }

            //if(!url.IsInnerIP()) SpinWait.SpinUntil(() => false, TimeSpan.FromSeconds(new Random().Next(1, 1)));

Retry:

            try
            {
                HttpWebRequest httpRequest;

                if (requestType == RequestEnum.POST)
                {
                    httpRequest = (HttpWebRequest)WebRequest.Create(url);
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(requestParams))
                    {
                        httpRequest = (HttpWebRequest)WebRequest.Create(url);
                    }
                    else
                    {
                        httpRequest = (HttpWebRequest)WebRequest.Create(url + "?" + requestParams.Trim());
                    }
                }

                httpRequest.Method = requestType.ToString();

                httpRequest.Timeout = 60 * 1000;

                httpRequest.ContentType = string.IsNullOrWhiteSpace(contentType) ? defaultContentType : contentType;

                httpRequest.Accept = string.IsNullOrWhiteSpace(accept) ? defaultAccept : accept;

                httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");

                httpRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

                httpRequest.UserAgent = userAgent;

                httpRequest.CookieContainer = cookieContainer;

                if (isEnanbleProxy && !url.IsInnerIP() && !string.IsNullOrEmpty(host))
                {
                    var index = host.IndexOf(":", StringComparison.Ordinal);

                    httpRequest.Proxy = new WebProxy(host.Substring(0, index), Convert.ToInt32(host.Substring(index + 1)));
                }
                if (!string.IsNullOrWhiteSpace(referer))
                {
                    httpRequest.Referer = referer;
                }

                if (requestType == RequestEnum.POST && !string.IsNullOrWhiteSpace(requestParams))
                {
                    var encoding = Encoding.GetEncoding("utf-8");

                    var bytesToPost = encoding.GetBytes(requestParams);

                    httpRequest.ContentLength = bytesToPost.Length;

                    var requestStream = httpRequest.GetRequestStream();

                    requestStream.Write(bytesToPost, 0, bytesToPost.Length);

                    requestStream.Close();
                }

                var response = (HttpWebResponse)httpRequest.GetResponse();

                var stream = response.GetResponseStream();

                var reStr = string.Empty;

                if (stream != null)
                {
                    var sr = new StreamReader(stream, Encoding.GetEncoding("utf-8"));

                    reStr = sr.ReadToEnd();

                    sr.Close();
                }
                else
                {
                    dataResult.IsSuccess = false;
                }

                response.Close();

                dataResult.Data = reStr;

                return(dataResult);
            }
            catch (WebException ex)
            {
                //LogFactory.Warn($"Web响应异常,请求Url:{url},请求参数:{requestParams}代理:{host},异常信息:{ex.Message}");

                if (string.IsNullOrWhiteSpace(host) && --retryCount >= 0)
                {
                    if (ex.Status == WebExceptionStatus.ProtocolError)
                    {
                        SpinWait.SpinUntil(() => false, TimeSpan.FromSeconds(new Random().Next(1, 2)));
                    }

                    goto Retry;
                }

                dataResult.IsSuccess = false;

                dataResult.Code = ResultCodeEnum.WebNoConnection;

                dataResult.ErrorMsg = $"Web响应异常,请求Url:{url},Host:{host},异常信息:{ex.Message}";

                return(dataResult);
            }
            catch (Exception ex)
            {
                LogFactory.Error($"请求异常,请求Url:{url},请求参数:{requestParams},Host:{host},{Environment.NewLine}异常信息:{ex.Message}{Environment.NewLine}{ex.StackTrace}");

                dataResult.IsSuccess = false;

                dataResult.ErrorMsg = $"请求异常,请求Url:{url},Host:{host},异常信息:{ex.Message},详情请错误看日志!";

                return(dataResult);
            }
        }
 /// <summary>
 /// http 请求
 /// </summary>
 /// <param name="hostUrl"></param>
 /// <param name="action"></param>
 /// <param name="requestParams"></param>
 /// <param name="requestType"></param>
 /// <returns></returns>
 public static string QueryRequest(string hostUrl, string action, string requestParams = "", RequestEnum requestType = RequestEnum.GET, CookieContainer cookieContainer = null, string referer = "", string contentType = "", string accept = "")
 {
     return(QueryRequest((hostUrl + action), requestParams, requestType, cookieContainer, referer, contentType, accept));
 }
        /// <summary>
        /// http 请求
        /// </summary>
        /// <param name="hostUrl"></param>
        /// <param name="action"></param>
        /// <param name="requestParams"></param>
        /// <param name="requestType"></param>
        /// <returns></returns>
        public static string QueryRequest(string url, string requestParams = "", RequestEnum requestType = RequestEnum.GET, CookieContainer cookieContainer = null, string referer = "", string contentType = "", string accept = "")
        {
To:

            HttpWebRequest httpRequest;

            WebProxy proxy = new WebProxy();

            try
            {
                if (requestType == RequestEnum.POST)
                {
                    httpRequest = (HttpWebRequest)WebRequest.Create(url);
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(requestParams))
                    {
                        httpRequest = (HttpWebRequest)WebRequest.Create(url);
                    }
                    else
                    {
                        httpRequest = (HttpWebRequest)WebRequest.Create(url + "?" + requestParams.Trim());
                    }
                }


                httpRequest.Method      = requestType.ToString();
                httpRequest.Timeout     = 30 * 1000;
                httpRequest.ContentType = string.IsNullOrWhiteSpace(contentType) ? defaultContentType : contentType;
                httpRequest.Accept      = string.IsNullOrWhiteSpace(accept) ? defaultAccept : accept;
                httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
                httpRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                httpRequest.UserAgent       = userAgent;
                httpRequest.CookieContainer = cookieContainer;

                if (isEnanbleProxy && !url.Contains("192.168."))
                {
                    proxy = NextProxy();

                    httpRequest.Proxy = proxy;
                }
                if (!string.IsNullOrWhiteSpace(referer))
                {
                    httpRequest.Referer = referer;
                }

                if (requestType == RequestEnum.POST)
                {
                    Encoding encoding    = Encoding.GetEncoding("utf-8");
                    byte[]   bytesToPost = encoding.GetBytes(requestParams);

                    httpRequest.ContentLength = bytesToPost.Length;
                    Stream requestStream = httpRequest.GetRequestStream();
                    requestStream.Write(bytesToPost, 0, bytesToPost.Length);
                    requestStream.Close();
                }

                HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();

                StreamReader sr    = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string       reStr = sr.ReadToEnd();
                sr.Close();
                response.Close();
                return(reStr);
            }
            catch (WebException ex)
            {
                if (!url.Contains("192.168") && isEnanbleProxy)
                {
                    proxyData.ExpirationTime = DateTime.Now.AddSeconds(-30);

                    proxyDataList.Add(proxy.Address.Host);
                }

                return(string.Empty);

                goto To;

                //return QueryRequest(url, requestParams, requestType, cookieContainer, referer, contentType);
            }
            catch
            {
                return(string.Empty);
            }
        }
 /// <summary>
 /// http 请求,并将请求结果序列化为指定实体
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="hostUrl"></param>
 /// <param name="action"></param>
 /// <param name="requestParams"></param>
 /// <param name="requestType"></param>
 /// <returns></returns>
 public static T RequestToEntity <T>(string hostUrl, string action, string requestParams, RequestEnum requestType) where T : class
 {
     return(JsonConvert.DeserializeObject <T>(QueryRequest(hostUrl, action, requestParams, requestType)));
 }