public static WebResponseData IssueRequest( Uri uri, string method = "GET", string requestContent = null, IEnumerable<Cookie> cookies = null, TimeSpan? timeout = null, bool downloadAsBinary = false) { cookies = cookies ?? Enumerable.Empty<Cookie>(); timeout = timeout ?? DefaultTimeout; var responseData = new WebResponseData { RequestedUri = uri }; try { var webRequest = GetRequest(uri, method, timeout.Value, requestContent); AttachOutgoingCookies(webRequest, cookies); using (var webResponse = (HttpWebResponse)webRequest.GetResponse()) using (var responseStream = webResponse.GetResponseStream()) { responseData.StatusCode = webResponse.StatusCode; responseData.ContentType = webResponse.GetResponseHeader("Content-Type"); if (downloadAsBinary) { ProcessResponseBinary(responseStream, responseData); } else { ProcessResponse(responseStream, responseData); } } } catch (WebException e) { if (e.Status == WebExceptionStatus.ProtocolError) { var webResponse = (HttpWebResponse)e.Response; responseData.StatusCode = webResponse.StatusCode; } } return responseData; }
private static void ProcessResponseBinary( Stream responseStream, WebResponseData responseData) { var buffer = new byte[BinaryBufferLength]; using (var memoryStream = new MemoryStream()) { while (true) { int read = responseStream.Read(buffer, 0, buffer.Length); if (read <= 0) { responseData.Bytes = memoryStream.ToArray(); return; } memoryStream.Write(buffer, 0, read); } } }
private static void ProcessResponse( Stream responseStream, WebResponseData responseData) { using (var reader = new StreamReader(responseStream, Encoding.UTF8)) { responseData.Content = reader.ReadToEnd(); } }