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))); }