예제 #1
0
파일: UriFetcher.cs 프로젝트: treg/Recluse
        public async Task <UriFetcher> Fetch()
        {
            HttpStatusCode?code = null;

            byte[]      buffer   = new byte[0];
            WebResponse response = null;

            var webRequest = WebRequest.Create(Task.Uri);

            try
            {
                response = await webRequest.GetResponseAsync();

                var stream = response.GetResponseStream();
                buffer = await ReadFullyAsync(stream);

                stream.Dispose();
                if (response is HttpWebResponse)
                {
                    code = (response as HttpWebResponse).StatusCode;
                }
            }
            catch (WebException we)
            {
                if (we.Response is HttpWebResponse)
                {
                    var exresponse = we.Response as HttpWebResponse;
                    code     = exresponse.StatusCode;
                    response = exresponse;
                }
            }
            finally
            {
                Completed     = true;
                CompletedTask = new CompletedTask();
                CompletedTask.FetchedDocument = new WebDocument(data: buffer, headers: response?.Headers, uri: Task.Uri, statusCode: code, contentType: response?.ContentType);
                CompletedTask.Task            = Task;
            }

            return(this);
        }