/// <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); }
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); }
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); }
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())); } }
/// <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); }
/// <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))); } }
public async Task Download(string url, object data, HttpMethodEnum method = HttpMethodEnum.POST) { await JSRuntime.InvokeVoidAsync("urlFuncs.download", url, JsonSerializer.Serialize(data), method.ToString()); }