示例#1
0
 private void OnTimeout(object state, bool timed_out)
 {
     if (timed_out)
     {
         request?.Abort();
     }
     if (Owner == null)
     {
         return;
     }
     Owner.OnRemovedFromManager -= owner_OnRemovedFromManager;
     Owner = null;
 }
示例#2
0
        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);
        }
示例#3
0
        /// <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);
            }
        }
示例#4
0
        //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,
            });
        }
示例#5
0
        /// <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);
        }
示例#6
0
        //[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();
            }
        }
示例#8
0
        /// <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);
            }
        }
示例#9
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();
            }
        }
示例#11
0
        /// <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);
            }
        }
示例#12
0
        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("");
        }
示例#13
0
        public void Abort_CreateRequestThenAbort_Success(Uri remoteServer)
        {
            _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer);

            _savedHttpWebRequest.Abort();
        }
示例#14
0
        public void Abort_BeginGetResponseUsingNoCallbackThenAbort_Success(Uri remoteServer)
        {
            _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer);

            _savedHttpWebRequest.BeginGetResponse(null, null);

            _savedHttpWebRequest.Abort();
        }
示例#15
0
        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);
        }
示例#16
0
        public void Abort_BeginGetResponseThenAbort_ResponseCallbackCalledBeforeAbortReturns(Uri remoteServer)
        {
            _savedHttpWebRequest = HttpWebRequest.CreateHttp(remoteServer);

            _savedHttpWebRequest.BeginGetResponse(new AsyncCallback(ResponseCallback), null);

            _savedHttpWebRequest.Abort();
            Assert.Equal(1, _responseCallbackCallCount);
        }