Пример #1
0
        private void GetFileSizeAsync(object state)
        {
            Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
            string url = state.ToString();

            Invoke(new Action <string>(downLoadUrl => {
                try
                {
                    _ischecking = true;
                    var req     = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(downLoadUrl));
                    using (var res = req.GetResponse())
                    {
                        _contentLength    = res.ContentLength;
                        FileLenLabel.Text = GetSizeText(_contentLength);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    DialogResult = DialogResult.Cancel;
                }
                finally
                {
                    _ischecking = false;
                    _waitLock.Set();
                }
            }), url);
        }
Пример #2
0
        private HttpWebRequest CreateHttpWebRequest(RequestMethod method
                                                    , string url, JsonWriter data, int timeout)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(url));

            request.Method    = FormatRequestMethod(method);
            request.Timeout   = timeout;
            request.Accept    = HEADER_ACCEPT;
            request.KeepAlive = true;

            if (_credentials != null)
            {
                request.Credentials = _credentials;
                _credentials        = null;
            }

            if (method == RequestMethod.POST && data != null && data.Length != 0)
            {
                request.ContentType   = HEADER_CONTENT_TYPE;
                request.ContentLength = data.Length;
                using (Stream rstream = request.GetRequestStream()) {
                    data.CopyTo(rstream);
                }
            }
            else
            {
                request.ContentLength = 0;
            }
            return(request);
        }
Пример #3
0
        public model.WebSvcMessageResponse Work()
        {
            HttpWebResponse _webResponse  = null;
            StreamWriter    _streamWriter = null;
            StreamReader    _streamReader = null;

            try {
                HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(_webSvcMethod.ServiceURI));

                webRequest.Method      = "Post";
                webRequest.ContentType = _webSvcMethod.Request.Headers[model.WebSvcMessage.HEADER_NAME_CONTENT_TYPE];
                webRequest.Headers[model.WebSvcMessageRequest.HEADER_NAME_SOAP_ACTION] = _webSvcMethod.Request.Headers[model.WebSvcMessageRequest.HEADER_NAME_SOAP_ACTION];
                webRequest.ServicePoint.Expect100Continue = false;
                webRequest.Proxy = base.WebProxy;

                webRequest.Timeout = base.TimeoutInSec * 1000;

                _streamWriter = new StreamWriter(webRequest.GetRequestStream());

                _streamWriter.Write(_webSvcMethod.Request.Body);
                _streamWriter.Flush();
                _streamWriter.Close();

                _webResponse = (HttpWebResponse)webRequest.GetResponse();

                base.Log.Info("Work Response Process " + base.Name);

                _streamReader = new StreamReader(_webResponse.GetResponseStream());

                string body   = _streamReader.ReadToEnd();
                string status = ((int)_webResponse.StatusCode).ToString() + " " + _webResponse.StatusCode.ToString();
                Dictionary <string, string> headers = new Dictionary <string, string>();
                foreach (string key in _webResponse.Headers.Keys)
                {
                    headers[key] = _webResponse.Headers[key];
                }

                var response = new model.WebSvcMessageResponse();
                response.Body    = body;
                response.Status  = status;
                response.Headers = headers;

                return(response);
            }
            finally
            {
                if (_webResponse != null)
                {
                    _webResponse.Close();
                }
                if (_streamWriter != null)
                {
                    _streamWriter.Close();
                }
                if (_streamReader != null)
                {
                    _streamReader.Close();
                }
            }
        }
Пример #4
0
 private void InitWebRequest(RequestInfo info, Action <ResponseInfo> act, out HttpWebRequest webRequest, out StateObject state)
 {
     webRequest                   = HttpWebRequest.CreateDefault(new Uri(info.Url)) as HttpWebRequest;
     webRequest.KeepAlive         = true;
     webRequest.AllowAutoRedirect = info.AllowAutoRedirect;
     if (info.Headers != null && info.Headers.Count > 0)
     {
         foreach (string key in info.Headers.Keys)
         {
             webRequest.Headers.Add(key, info.Headers[key]);
         }
     }
     //webRequest.Proxy = WebProxy.GetDefaultProxy();
     //webRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
     // webResponse.Headers.Get("Set-Cookie");
     state = new StateObject
     {
         Buffer         = new byte[1024 * 1024],
         HttpWebRequest = webRequest,
         Action         = act,
         ResponseInfo   = new ResponseInfo
         {
             RequestInfo     = info,
             ResponseContent = new MemoryStream()
         }
     };
 }
Пример #5
0
        private HttpWebRequest CreateHttpWebRequest(RequestMethod method, string url, JSON data)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(url));

            request.Method    = FormatRequestMethod(method);
            request.Accept    = HEADER_ACCEPT;
            request.KeepAlive = true;

            if (_credentials != null)
            {
                request.Credentials = _credentials;
                _credentials        = null;
            }

            if (method == RequestMethod.POST && data != null && data.Length != 0)
            {
                request.ContentType   = HEADER_CONTENT_TYPE;
                request.ContentLength = data.Length;
                using (Stream rstream = request.GetRequestStream()) {
                    rstream.Write(data.GetBuffer(), 0, (int)data.Length);
                }
            }
            else
            {
                request.ContentLength = 0;
            }
            return(request);
        }
Пример #6
0
        public static byte[] DownloadData(Uri address, ByteRange range = null)
        {
            var request = HttpWebRequest.CreateDefault(address) as HttpWebRequest;

            request.AllowAutoRedirect = true;
            request.Timeout           = _timeoutMs;
            if (range != null)
            {
                request.AddRange(range.Low, range.High);
            }

            var response = request.GetResponse() as HttpWebResponse;

            if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.PartialContent)
            {
                throw new WebException($"{address} [{range}] returned HTTP {response.StatusCode}");
            }

            var len = Convert.ToInt32(response.Headers["Content-Length"]);

            using (Stream stream = response.GetResponseStream(), mem = new MemoryStream(len != 0 ? len : avgDownloadSize))
            {
                stream.CopyTo(mem);
                return(((MemoryStream)mem).ToArray());
            }
        }
Пример #7
0
        public static object GetObject(string url, bool useZip)
        {
            Uri            uri = new Uri(url);
            HttpWebRequest req = HttpWebRequest.CreateDefault(uri) as HttpWebRequest;

            using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
            {
                bool isError = resp.StatusDescription != null && resp.StatusDescription == "ERROR";
                using (BinaryReader stReader = new BinaryReader(resp.GetResponseStream()))
                {
                    using (MemoryStream mstream = new MemoryStream())
                    {
                        {
                            byte[] buffer = new byte[256];
                            int    count  = stReader.Read(buffer, 0, 256);
                            while (count > 0)
                            {
                                mstream.Write(buffer, 0, count);
                                count = stReader.Read(buffer, 0, 256);
                            }
                        }
                        mstream.Position = 0;
                        if (useZip && !isError)
                        {
                            return(PersistObject.StreamToObjectWithZIP(mstream));
                        }
                        else
                        {
                            return(PersistObject.StreamToObject(mstream));
                        }
                    }
                }
            }
        }
Пример #8
0
 /// <summary>
 /// Main template used for requests (by default a GET request) to the given path with the given
 /// parameters sent as a querystring.
 /// WorkFront server authorization complied with by adding session ID to requests as HTTP header.
 /// </summary>
 /// <param name="path">
 /// The path to the URL you want requested. This path is appended to the URL provided in the constructor.
 /// If ""http://yourcompany.attask-ondemand.com/attask/api"" is provided to the constructor, "/search"
 /// is provided as the path parameter, and "name=ProjectName" and "day=today" are sent as parameters
 /// then an HTTP Request will be sent to "http://yourcompany.attask-ondemand.com/attask/api/search?q=mysearch&day=today"
 /// </param>
 /// <param name="parameters">
 /// Parameters to be added to the querystring. Each parameter is added as it is given
 /// starting with a "?" character and separated by an "&" character. If "q=mySearch" and
 /// "day=today" are sent as parameters then "?q=mysearch&day=today" will be added to the query string
 /// </param>
 /// <returns>
 /// JToken containing the json data returned by the server.
 /// </returns>
 public JToken DoRequest(string path, string sessionID, params string[] parameters)
 {
     try
     {
         if (!path.StartsWith("/"))
         {
             path = "/" + path;
         }
         string     fullUrl = url + path + ToQueryString(parameters);
         WebRequest request = HttpWebRequest.CreateDefault(new Uri(fullUrl));
         request.Headers.Add("SessionID", sessionID);
         using (WebResponse response = request.GetResponse())
         {
             using (Stream responseStream = response.GetResponseStream())
             {
                 return(ReadResponse(responseStream));
             }
         }
     }
     catch (UriFormatException)
     {
         throw new ClientException("Invalid URL. Please ensure the company name matches the name in the WorkFront URL.");
     }
     catch (WebException webex)
     {
         throw new ClientException("Server returned message: " + webex.Message + ";");
     }
     catch (Exception ex)
     {
         throw new ClientException(ex.Message);
     }
 }
Пример #9
0
        public WebRequest Create(Uri uri)
        {
            Uri httpUri = new Uri(uri.ToString().Replace("httpx://", "http://"));

            CookieContainer cookies = new CookieContainer();
            string          accept  = null;

            NameValueCollection parameters = HttpUtility.ParseQueryString(uri.Query);

            foreach (string key in parameters.AllKeys)
            {
                if (key == null)
                {
                    continue;
                }

                if (key.StartsWith("cookie:"))
                {
                    string name  = key.Substring("cookie:".Length);
                    string value = parameters[key];
                    cookies.Add(new Cookie(name, value, "/", uri.Host));

                    parameters.Remove(key);
                }
                else if (key.StartsWith("header:accept"))
                {
                    accept = parameters[key];
                }
            }

            // Remove cookie parameters from URL
            string newPathAndQuery = httpUri.PathAndQuery.Substring(0, httpUri.PathAndQuery.Length - httpUri.Query.Length);
            string newQuery        = string.Empty;

            foreach (string key in parameters.AllKeys)
            {
                newQuery += "&" + HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(parameters[key]);
            }
            if (newQuery.Length > 0)
            {
                newQuery        = "?" + newQuery.TrimStart('&');
                newPathAndQuery = newPathAndQuery + newQuery;
            }
            httpUri = new Uri(httpUri.Scheme + "://" + httpUri.Host + newPathAndQuery);

            HttpWebRequest req = HttpWebRequest.CreateDefault(httpUri) as HttpWebRequest;

            req.CookieContainer = cookies;
            if (accept != null)
            {
                req.Accept = accept;
            }

            return(req);
        }
        public void ApplyAuthenticationToRequestTest()
        {
            HttpWebRequest request = HttpWebRequest.CreateDefault(new Uri("http://www.example.com")) as HttpWebRequest;

            authenticator.ApplyAuthenticationToRequest(request);
            string expectedHeaderKey   = "Authorization";
            string expectedHeaderValue = "OAuth " + token;

            Assert.IsTrue(request.Headers.AllKeys.Contains(expectedHeaderKey));
            Assert.AreEqual(expectedHeaderValue, request.Headers[expectedHeaderKey]);
        }
Пример #11
0
        private static HttpWebRequest CreateWebRequest(String URL)
        {
            HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(URL));

            Request.CookieContainer = new CookieContainer();
            if (TimeoutSecs > 0)
            {
                Request.Timeout = TimeoutSecs * 1000;
            }
            return(Request);
        }
Пример #12
0
        /// <summary>
        /// 获取文件大小
        /// </summary>
        /// <param name="url">文件url地址</param>
        /// <returns>string</returns>
        private static string GetFileSize(string url)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(url));

            httpWebRequest.Method  = "Head";
            httpWebRequest.Timeout = 5000;
            using (var webResponse = httpWebRequest.GetResponse())
            {
                return(GetAutoSize(webResponse.ContentLength, 2));
            }
        }
Пример #13
0
        internal string DownloadString(string url)
        {
            url = AbsolizeUrl(url);
            WebRequest request = HttpWebRequest.CreateDefault(new Uri(url));

            try {
                using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream())) {
                    return(reader.ReadToEnd());
                }
            } catch (WebException) {
                return(string.Empty);
            }
        }
Пример #14
0
        public static WebRequest getWebRequest(string url, string path, Dictionary <string, string> parameters, string method, out string outApiCall, bool debugMode = false)
        {
            path = fixPathSlashes(url, path);

            string uri = url + path + getQuery(parameters);

            outApiCall = uri;

            if (debugMode)
            {
                System.Diagnostics.Debug.WriteLine("URI REQUESTED: " + uri);
            }

            WebRequest request = HttpWebRequest.CreateDefault(new Uri(uri));

            request.Method = method;
            return(request);
        }
Пример #15
0
        private void InitializeRequest(Uri requestUri)
        {
            int timeout = 0;

            if (!int.TryParse(ConfigurationManager.AppSettings["Timeout"], out timeout))
            {
                if (ConfigurationManager.AppSettings["Timeout"].ToLower().Equals("infinite"))
                {
                    timeout = Timeout.Infinite;
                }
            }

            _request           = HttpWebRequest.CreateDefault(requestUri) as HttpWebRequest;
            _request.Accept    = ConfigurationManager.AppSettings["Accept"];
            _request.Timeout   = ((_timeout == 0) ? timeout : _timeout);
            _request.UserAgent = ConfigurationManager.AppSettings["UserAgentString"];
            _request.Headers.Add("Accept-Language", ConfigurationManager.AppSettings["AcceptLanguage"]);
            _request.Headers.Add("Accept-Encoding", ConfigurationManager.AppSettings["AcceptEncoding"]);
            _request.AllowAutoRedirect = true;
        }
Пример #16
0
        HttpWebRequest GetWebRequest(string url)
        {
            HttpWebRequest request = null;

            if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
            {
                ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;
                request = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(url));
            }
            else
            {
                request = (HttpWebRequest)HttpWebRequest.Create(url);
            }

            request.Method           = "POST";
            request.ContentType      = "application/json;charset=UTF-8";
            request.Timeout          = _timeout;
            request.ReadWriteTimeout = _readWriteTimeout;

            return(request);
        }
        /// <summary>
        /// Sends a request (by default a GET request) to the given path with the given parameters sent as a querystring.
        /// </summary>
        /// <param name="path">
        /// The path to the URL you want requested. This path is appended to the URL provided in the constructor.
        /// If "http://somesite.com" is provided to the constructor and "/search" is provided as the path parameter
        /// and "q=mySearch" and "day=today" are sent as parameters
        /// then an HTTP Request will be sent to "http://somesite.com/search?q=mysearch&day=today"
        /// </param>
        /// <param name="parameters">
        /// Parameters to be added to the querystring. Each parameter is added as it is given
        /// starting with a "?" character and separated by an "&" character.
        /// If "q=mySearch" and "day=today" are sent as parameters then
        /// "?q=mysearch&day=today" will be added to the query string
        /// </param>
        /// <returns>
        /// A <see cref="JToken"/> containing the json data returned by the server.
        /// </returns>
        public JToken DoRequest(string path, params string[] parameters)
        {
            if (!path.StartsWith("/"))
            {
                path = "/" + path;
            }
            string fullUrl = url + path + ToQueryString(parameters);

            if (DebugUrls)
            {
                Console.WriteLine("Requesting: {0}", fullUrl);
            }

            WebRequest request = HttpWebRequest.CreateDefault(new Uri(fullUrl));

            using (WebResponse response = request.GetResponse()) {
                using (Stream responseStream = response.GetResponseStream()) {
                    return(ReadResponse(responseStream));
                }
            }
        }
Пример #18
0
        /// <summary>
        /// Opens the given url
        /// </summary>
        /// <param name="method"></param>
        /// <param name="url"></param>
        /// <param name="data"></param>
        private void Open(string method, string url, string data)
        {
            if (m_Window != null)
            {
                m_Window.FireOnUnload(m_Window, new EventArgs());
                m_Window = null;
            }

            url = AbsolizeUrl(url);

            m_Uri = new Uri(url);

            m_Window          = new HtmlWindow(this, null);
            m_Window.Document = new HtmlDocument(m_Window);

            if (m_Uri.Scheme == Uri.UriSchemeHttp ||
                m_Uri.Scheme == Uri.UriSchemeHttps)
            {
                WebRequest request = HttpWebRequest.CreateDefault(m_Uri);
                request.Method = method;
                if (data.Length > 0)
                {
                    request.ContentType   = "application/x-www-form-urlencoded";
                    request.ContentLength = data.Length;
                    foreach (WebCookie cookie in Cookies)
                    {
                        request.Headers.Add("Cookie", cookie.ToString());
                    }
                    using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) {
                        writer.Write(data);
                    }
                }

                WebResponse response = null;
                try {
                    response = request.GetResponse();
                } catch (WebException ex) {
                    response = ex.Response;
                }

                for (int i = 0; i < response.Headers.Count; i++)
                {
                    if (response.Headers.Keys[i] == "Set-Cookie")
                    {
                        Cookies.Add(response.Headers[i]);
                    }
                }

                using (StreamReader reader = new StreamReader(response.GetResponseStream())) {
                    new HtmlReader().Read(reader, m_Window.Document);
                }
            }
            else if (m_Uri.Scheme == Uri.UriSchemeFile)
            {
                using (StreamReader reader = new StreamReader(m_Uri.PathAndQuery)) {
                    new HtmlReader().Read(reader, m_Window.Document);
                }
            }


            m_Engine = new ScriptEngine(this);
            m_Engine.SetGlobalObject("navigator", this);
            m_Engine.SetGlobalObject("document", m_Window.Document);
            m_Engine.SetGlobalObject("window", m_Window);
            foreach (HtmlScriptElement ele in m_Window.Document.GetElementsByTagName("SCRIPT"))
            {
                m_Engine.AddCodeBlock(ele.SourceCodeId, ele.SourceCode);
            }


            m_Engine.Compile();
            m_Engine.Run();

            m_Window.FireOnLoad(m_Window, new EventArgs());
        }
Пример #19
0
        /// <summary>
        /// 获得HTTP页面URI的HTTP返回字符串(get方法)
        /// </summary>
        /// <param name="Url">原始请求Url</param>
        /// <param name="ResponseUrl">跳转后的Url</param>
        /// <param name="Status">状态信息</param>
        /// <param name="ExceptionMsg">异常信息</param>
        /// <param name="UsingEncoding">实际使用的Encoding</param>
        /// <param name="TimeoutSecs"></param>
        /// <param name="Encoding">指定编码</param>
        /// <param name="Proxy"></param>
        /// <param name="Cookie">输入和输出</param>
        /// <param name="ReEncodeByHTMLCharset">根据HTML头Charset标志决定编码(utf8,gb2312,gbk之一),忽略指定编码,并将结果返回到UsingEncoding</param>
        /// <returns>结果字符</returns>
        private static string DownloadHTTPString(string Url, out string ResponseUrl, out Enums.CrawlResult Status, out string ExceptionMsg, out string UsingEncoding, int TimeoutSecs = 40, string Encoding = "UTF-8", string Proxy = null, CookieContainer Cookie = null, bool ReEncodeByHTMLCharset = true)
        {
            //todo:low httpdownload 支持header 的 tag检查,未更新页面不下载
            //todo:low httpdownload DNS缓存

            #region 初始化设置
            HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(Url));
            Request.AllowAutoRedirect            = true;
            Request.MaximumAutomaticRedirections = 5;
            //Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2";
            Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/15.0.849.0 Safari/535.1";
            Request.KeepAlive = true;
            Request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
            Request.Referer = "http://" + Request.RequestUri.Host;

            if (Cookie != null)
            {
                Request.CookieContainer = Cookie;
            }
            else
            {
                Request.CookieContainer = new CookieContainer();
            }
            if (TimeoutSecs > 0)
            {
                Request.Timeout = TimeoutSecs * 1000;
            }
            if (!string.IsNullOrEmpty(Proxy))
            {
                Request.Proxy = new WebProxy(Proxy);
            }

            #endregion 初始化设置

            //建立连接
            System.Net.HttpWebResponse Response;
            try
            {
                Response = (HttpWebResponse)Request.GetResponse();
            }
            catch (Exception ex)
            {
                Status        = DetermineResultStatus(ex);
                ExceptionMsg  = ex.Message;
                ResponseUrl   = Url;
                UsingEncoding = null;
                return(null);
            }

            string Content = null;
            //参数默认值GB2312,如果设为null,则这里初始化为Encoding.Default

            Encoding Encode = string.IsNullOrEmpty(Encoding) ? System.Text.Encoding.GetEncoding("UTF-8") : System.Text.Encoding.GetEncoding(Encoding);
            if (ReEncodeByHTMLCharset)
            {
                #region 根据Html头判断

                //缓冲区长度
                const int N_CacheLength = 10000;
                //头部预读取缓冲区,字节形式
                List <byte> bytes = new List <byte>();
                int         count = 0;
                //头部预读取缓冲区,字符串
                string cache = "";

                //创建流对象并解码
                System.IO.Stream ResponseStream;
                switch (Response.ContentEncoding.ToUpperInvariant())
                {
                case "GZIP":
                    ResponseStream = new GZipStream(Response.GetResponseStream(), CompressionMode.Decompress);
                    break;

                case "DEFLATE":
                    ResponseStream = new DeflateStream(Response.GetResponseStream(), CompressionMode.Decompress);
                    break;

                default:
                    ResponseStream = Response.GetResponseStream();
                    break;
                }

                try
                {
                    while (!(cache.EndsWith("</head>", StringComparison.OrdinalIgnoreCase) || count >= N_CacheLength))
                    {
                        byte b = (byte)ResponseStream.ReadByte();
                        if (b < 0)  //end of stream
                        {
                            break;
                        }
                        bytes.Add(b);

                        count++;
                        cache += (char)b;
                    }

                    var match = Regex.Match(cache, CharsetReg, RegexOptions.IgnoreCase | RegexOptions.Multiline);
                    if (match.Success)
                    {
                        try
                        {
                            var charset = match.Groups["Charset"].Value;
                            Encode = System.Text.Encoding.GetEncoding(charset);
                        }
                        catch {
                        }
                    }
                    else
                    {
                        try
                        {
                            if (Response.CharacterSet == "ISO-8859-1")
                            {
                                Encode = System.Text.Encoding.GetEncoding("GB2312");
                            }
                            else
                            {
                                Encode = System.Text.Encoding.GetEncoding(Response.CharacterSet);
                            }
                        }
                        catch {}
                    }


                    //缓冲字节重新编码,然后再把流读完
                    StreamReader Reader = new StreamReader(ResponseStream, Encode);
                    Content = Encode.GetString(bytes.ToArray(), 0, count) + Reader.ReadToEnd();
                    Reader.Close();
                }
                catch (Exception ex)
                {
                    Status        = DetermineResultStatus(ex);
                    ExceptionMsg  = ex.Message;
                    ResponseUrl   = Response.ResponseUri.AbsoluteUri;
                    UsingEncoding = null;
                    return(null);
                }
                finally
                {
                    Response.Close();
                }

                #endregion 根据Html头判断
            }
            else
            {
                #region 直接读取流

                //不根据Html头来判断,直接读取流
                System.IO.StreamReader Reader = new System.IO.StreamReader(Response.GetResponseStream(), Encode);
                try
                {
                    Content = Reader.ReadToEnd();
                }
                catch (Exception ex)
                {
                    Status        = DetermineResultStatus(ex);
                    ExceptionMsg  = ex.Message;
                    ResponseUrl   = Response.ResponseUri.AbsoluteUri;
                    UsingEncoding = null;
                    return(null);
                }
                finally
                {
                    Reader.Close();
                }

                #endregion 直接读取流
            }

            Status        = Enums.CrawlResult.Succ;
            ExceptionMsg  = null;
            ResponseUrl   = Response.ResponseUri.AbsoluteUri;
            Encoding      = Encode.WebName;
            UsingEncoding = Encode.WebName;
            return(Content);
        }
Пример #20
0
        protected override void Work()
        {
            DateTime startTime = DateTime.Now;

            try {
                if (_cancelObject != null)
                {
                    _cancelObject.Start();
                }

                HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.CreateDefault(new Uri(_webSvcMethod.ServiceURI));

                webRequest.Method      = "Post";
                webRequest.ContentType = _webSvcMethod.Request.Headers[model.WebSvcMessage.HEADER_NAME_CONTENT_TYPE];
                webRequest.Headers[model.WebSvcMessageRequest.HEADER_NAME_SOAP_ACTION] = _webSvcMethod.Request.Headers[model.WebSvcMessageRequest.HEADER_NAME_SOAP_ACTION];
                webRequest.ServicePoint.Expect100Continue = false;
                webRequest.Proxy   = base.WebProxy;
                webRequest.Timeout = base.TimeoutInSec * 1000;

                _streamWriter = new StreamWriter(webRequest.GetRequestStream());

                _streamWriter.Write(_webSvcMethod.Request.Body);
                _streamWriter.Flush();
                _streamWriter.Close();

                _webResponse = (HttpWebResponse)webRequest.GetResponse();

                if (_cancelToken != null)
                {
                    if (_cancelToken.IsCancellationRequested)
                    {
                        base.Log.Info("Work Response Cancel " + base.Name);
                        return;
                    }
                }
                base.Log.Info("Work Response Process " + base.Name);

                _streamReader = new StreamReader(_webResponse.GetResponseStream());

                string body   = _streamReader.ReadToEnd();
                string status = ((int)_webResponse.StatusCode).ToString() + " " + _webResponse.StatusCode.ToString();
                Dictionary <string, string> headers = new Dictionary <string, string>();
                foreach (string key in _webResponse.Headers.Keys)
                {
                    headers[key] = _webResponse.Headers[key];
                }

                if (OnComplete != null)
                {
                    DateTime endTime = DateTime.Now;

                    OnComplete(this,
                               new process.WebSvcAsync.EventParams.AsyncArgsCompleteCall(base.Name, startTime, endTime,
                                                                                         new process.WebSvcAsync.Result.CallAsyncResult(body, status, headers)
                                                                                         ));
                }
            }
            catch (System.Net.WebException ex)
            {
                if (_cancelToken != null)
                {
                    //if exception is thrown on the server then check whether user has cancelled before returning
                    if (_cancelToken.IsCancellationRequested)
                    {
                        base.Log.Info("Work Response Exception, User Cancelled " + Name + " " + ex.Message);
                        return;
                    }
                }

                //throw for the base class to handle
                throw ex;
            }
            finally
            {
                TearDown();
            }
        }