private void OnTimeout(object state, bool timed_out) { if (timed_out) { request?.Abort(); } if (Owner == null) { return; } Owner.OnRemovedFromManager -= owner_OnRemovedFromManager; Owner = null; }
public static string Post(string xml, string url, int timeout) { GC.Collect(); //垃圾回收,回收没有正常关闭的http连接 string result; //返回结果 HttpWebRequest request = null; HttpWebResponse response = null; try { //设置最大连接数 ServicePointManager.DefaultConnectionLimit = 200; //设置https验证方式 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult; } request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Timeout = timeout * 1000; //设置POST的数据类型和长度 request.ContentType = "text/xml"; byte[] data = Encoding.UTF8.GetBytes(xml); request.ContentLength = data.Length; //往服务器写入数据 var reqStream = request.GetRequestStream(); reqStream.Write(data, 0, data.Length); reqStream.Close(); //获取服务端返回 response = (HttpWebResponse)request.GetResponse(); //获取服务端返回数据 // ReSharper disable once AssignNullToNotNullAttribute StreamReader sr = new StreamReader(stream: response.GetResponseStream(), encoding: Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); } finally { //关闭连接和流 response?.Close(); request?.Abort(); } return(result); }
/// <summary> /// 执行HTTP POST请求 /// </summary> /// <param name="url">地址</param> /// <param name="postData">post 提交的字符串</param> /// <param name="isPost">是否是post</param> /// <param name="cookieContainer">CookieContainer</param> /// <param name="rspEncoding">响应编码</param> public string DoPost(string url, string postData, bool isPost, CookieContainer cookieContainer, Encoding rspEncoding = null) { if (rspEncoding == null) { rspEncoding = Encoding.GetEncoding("UTF-8"); } if (string.IsNullOrEmpty(postData)) { return(DoGet(url, cookieContainer, rspEncoding)); } HttpWebRequest httpWebRequest = null; HttpWebResponse httpWebResponse = null; try { byte[] byteRequest = Encoding.Default.GetBytes(postData); httpWebRequest = GetWebRequest(url, isPost ? "POST" : "GET"); httpWebRequest.CookieContainer = cookieContainer; httpWebRequest.ContentType = ContentType; httpWebRequest.Referer = url; httpWebRequest.Accept = Accept; httpWebRequest.UserAgent = UserAgent; httpWebRequest.ContentLength = byteRequest.Length; Stream stream = httpWebRequest.GetRequestStream(); stream.Write(byteRequest, 0, byteRequest.Length); stream.Close(); httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = httpWebResponse.GetResponseStream(); if (responseStream != null) { StreamReader streamReader = new StreamReader(responseStream, rspEncoding); string html = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); httpWebRequest.Abort(); httpWebResponse.Close(); return(html); } return(string.Empty); } catch (Exception) { httpWebRequest?.Abort(); httpWebResponse?.Close(); return(string.Empty); } }
//TODO: 处理线程安全问题 private void _SendAsync() { string error = null; HttpWebRequest request = null; try { var uri = new Uri(_requestUriString); request = WebRequest.CreateHttp(uri); request.Method = _method; request.Timeout = _timeout; var rsp = request.GetResponse(); if (_state != ReadyState.LOADING) { return; } var reader = new StreamReader(rsp.GetResponseStream()); _reseponseText = reader.ReadToEnd(); if (_state != ReadyState.LOADING) { return; } _code = ((HttpWebResponse)rsp).StatusCode; } catch (Exception ex) { if (_state != ReadyState.LOADING) { return; } error = ex.ToString(); } finally { try { request?.Abort(); } catch (Exception) { } } ScriptEngine.GetRuntime(_jsContext).EnqueueAction(OnResponseCallback, new ResponseArgs() { request = this, error = error, }); }
/// <summary> /// POST请求 /// </summary> /// <param name="url">url地址</param> /// <param name="data">xml</param> /// <param name="isUseCert">是否使用证书</param> /// <param name="timeout">超时时间</param> /// <param name="config">微信支付配置对象</param> /// <returns>请求返回数据</returns> public static string PostJson <T>(string url, T data, bool isUseCert, int timeout, WeChatConfigModel config) { GC.Collect(); string result = ""; HttpWebRequest request = null; HttpWebResponse response = null; try { ServicePointManager.DefaultConnectionLimit = 200; if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult; } request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Timeout = timeout * 1000; request.ContentType = "application/json"; byte[] dataBuffer = Encoding.UTF8.GetBytes(data.ToJson()); request.ContentLength = dataBuffer.Length; if (isUseCert) { var cert = new X509Certificate2($"{AppDomain.CurrentDomain.BaseDirectory}{config.SSLCERT_PATH}", config.SSLCERT_PASSWORD); request.ClientCertificates.Add(cert); } Stream reqStream = request.GetRequestStream(); reqStream.Write(dataBuffer, 0, dataBuffer.Length); reqStream.Close(); response = (HttpWebResponse)request.GetResponse(); var sr = new StreamReader(response.GetResponseStream() ?? throw new InvalidOperationException("读取流失败"), Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); } catch (ThreadAbortException) { Thread.ResetAbort(); } finally { response?.Close(); request?.Abort(); } return(result); }
//[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] //static extern bool InternetGetCookieEx(string pchUrl, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved); ////WebBrowser取出Cookie,当登录后才能取 //public string GetCookieString() //{ // // Determine the size of the cookie // int datasize = 256; // var cookieData = new StringBuilder(datasize); // if (!InternetGetCookieEx(_url, null, cookieData, ref datasize, 0x00002000, null)) // { // if (datasize < 0) // return null; // // Allocate stringbuilder large enough to hold the cookie // cookieData = new StringBuilder(datasize); // if (!InternetGetCookieEx(_url, null, cookieData, ref datasize, 0x00002000, null)) // return null; // } // return cookieData.ToString(); //} #region IDisposable 成员 void IDisposable.Dispose() { if (_fileList != null && _fileList.Any()) { foreach (var fileStream in _fileList) { fileStream.Value.Close(); fileStream.Value.Dispose(); } } if (_postStream != null) { _postStream.Close(); _postStream.Dispose(); } _rep?.Close(); _req?.Abort(); }
public static Response SendRequest(string full_url, string reffer, string method, bool login = false, bool use_data = false, string data = "") { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(full_url); // request.Headers.Set(HttpRequestHeader.Referer,reffer); request.Referer = reffer; request.Method = method; request.Date = DateTime.Now; request.KeepAlive = true; if (login) { CC = new CookieContainer(); } request.CookieContainer = CC; request.UserAgent = "Mozilla / 5.0(Windows NT 6.1; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.149 Safari / 537.36"; if (use_data) { var ldata = Encoding.ASCII.GetBytes(data); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = ldata.Length; using (var stream = request.GetRequestStream()) { stream.Write(ldata, 0, ldata.Length); } } try { using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader input = new StreamReader(response.GetResponseStream()); string buff = input.ReadToEnd(); return(new Response(response, buff, response.ResponseUri.ToString())); } } finally { request?.Abort(); } }
/// <summary> /// 获取下载文件长度 /// </summary> /// <param name="url"></param> /// <returns></returns> public long GetFileContentLength(string url) { HttpWebRequest request = null; try { request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = TimeOut; //向服务器请求,获得服务器回应数据流 var respone = request.GetResponse(); request.Abort(); return(respone.ContentLength); } catch (Exception) { request?.Abort(); return(0); } }
/// <summary> /// 处理http GET请求,返回数据 /// </summary> /// <param name="url">请求的url地址</param> /// <returns>http GET成功后返回的数据,失败抛WebException异常</returns> public static string Get(string url) { GC.Collect(); string result; HttpWebRequest request = null; HttpWebResponse response = null; //请求url以获取数据 try { //设置最大连接数 ServicePointManager.DefaultConnectionLimit = 200; //设置https验证方式 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult; } request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; //获取服务器返回 response = (HttpWebResponse)request.GetResponse(); //获取HTTP返回数据 // ReSharper disable once AssignNullToNotNullAttribute StreamReader sr = new StreamReader(stream: response.GetResponseStream(), encoding: Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); } finally { //关闭连接和流 response?.Close(); request?.Abort(); } return(result); }
/// <summary> /// 发送GET请求返回请求状态 /// </summary> /// <param name="url"></param> /// <returns></returns> public HttpStatusCode HttpGetCode(string url) { HttpWebRequest request = null; HttpWebResponse wbResponse = null; try { if (string.IsNullOrWhiteSpace(url)) { throw new ArgumentNullException(nameof(url)); } request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = this.ContentType; request.UserAgent = this.UserAgent; request.Accept = this.Accept; request.Referer = this.Referer; request.CookieContainer = this.CookieContainer; if (dicion != null) { //添加Headers foreach (var item in dicion) { request.Headers[item.Key] = item.Value; } } wbResponse = (HttpWebResponse)request.GetResponse(); //request.Abort(); return(wbResponse.StatusCode); //responseStream(wbResponse.GetResponseStream()); } finally { wbResponse?.Close(); request?.Abort(); } }
/// <summary> /// 执行HTTP GET请求 /// </summary> /// <param name="url">地址</param> /// <param name="cookieContainer">CookieContainer</param> /// <param name="rspEncoding">响应编码</param> public string DoGet(string url, CookieContainer cookieContainer, Encoding rspEncoding = null) { if (rspEncoding == null) { rspEncoding = Encoding.GetEncoding("UTF-8"); } HttpWebRequest httpWebRequest = null; HttpWebResponse httpWebResponse = null; try { httpWebRequest = GetWebRequest(url, "GET"); httpWebRequest.CookieContainer = cookieContainer; httpWebRequest.ContentType = ContentType; httpWebRequest.Referer = url; httpWebRequest.Accept = Accept; httpWebRequest.UserAgent = UserAgent; httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = httpWebResponse.GetResponseStream(); if (responseStream != null) { StreamReader streamReader = new StreamReader(responseStream, rspEncoding); string html = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); httpWebRequest.Abort(); httpWebResponse.Close(); return(html); } return(string.Empty); } catch (Exception) { httpWebRequest?.Abort(); httpWebResponse?.Close(); return(string.Empty); } }
public static string SendDynamic(string msg, string cookie = "") { HttpWebRequest request = null; try { request = (HttpWebRequest)WebRequest.Create(PostDynamicUrl); SetHeaders(request, "app", cookie); request.Host = "api.vc.bilibili.com"; request.Referer = "https://t.bilibili.com/"; request.Headers.Add("Origin", "https://t.bilibili.com"); long t = GetTimeStamp(); string jct = GetJCT(cookie); string content = $"dynamic_id=0&type=4&rid=0&content={UrlEncode(msg)}&extension=%7B%22emoji_type%22%3A1%7D&at_uids=&ctrl=%5B%5D&csrf_token={jct}"; return(POST(request, content)); } catch (Exception e) { request?.Abort(); Common.AppData.CQLog.Error("lua插件错误", $"post错误:{e.Message}"); } return(""); }
public void Abort_CreateRequestThenAbort_Success(Uri remoteServer) { _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer); _savedHttpWebRequest.Abort(); }
public void Abort_BeginGetResponseUsingNoCallbackThenAbort_Success(Uri remoteServer) { _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer); _savedHttpWebRequest.BeginGetResponse(null, null); _savedHttpWebRequest.Abort(); }
public void Abort_BeginGetResponseThenAbort_EndGetResponseThrowsWebException(Uri remoteServer) { _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer); _savedHttpWebRequest.BeginGetResponse(new AsyncCallback(ResponseCallback), null); _savedHttpWebRequest.Abort(); WebException wex = _savedResponseException as WebException; Assert.Equal(WebExceptionStatus.RequestCanceled, wex.Status); }
public void Abort_BeginGetResponseThenAbort_ResponseCallbackCalledBeforeAbortReturns(Uri remoteServer) { _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer); _savedHttpWebRequest.BeginGetResponse(new AsyncCallback(ResponseCallback), null); _savedHttpWebRequest.Abort(); Assert.Equal(1, _responseCallbackCallCount); }