/// <summary> /// ��������ĺ��� /// �������ײ�����Ĵ��� /// </summary> public NetworkResponse PerformRequest(Request request) { long requestStart = SystemClock.ElapsedRealtime(); while (true) { HttpWebResponse httpResponse = null; byte[] responseContents = null; Dictionary<String,String> responseHeaders = null; try { Dictionary<String, String> headers = new Dictionary<string, string>(); AddCacheHeaders(headers, request.CacheEntry); //�������� httpResponse = mHttpStack.PerformRequest(request, headers); var statusCode = httpResponse.StatusCode; responseHeaders = ConvertHeaders(httpResponse.Headers); if (statusCode == HttpStatusCode.MovedPermanently || statusCode == HttpStatusCode.Moved) { String newUrl = responseHeaders["Location"]; request.SetRedirectUrl(newUrl); } //��ȡ�������� Stream output = httpResponse.GetResponseStream(); if (output != null) { responseContents = EntityToBytes(output); } else { responseContents = new byte[0]; } long requestLifetime = SystemClock.ElapsedRealtime() - requestStart; LogSlowRequests(requestLifetime, request, responseContents, statusCode); if (statusCode < HttpStatusCode.OK || (int)statusCode > 299) { throw new IOException(); } return new NetworkResponse(statusCode, responseContents, responseHeaders, false, SystemClock.ElapsedRealtime() - requestStart); } catch (WebException ex) { if (ex.Response != null) { var result = ex.Response as HttpWebResponse; if (result.StatusCode == HttpStatusCode.NotModified) { Entry entry = request.CacheEntry; if (entry == null) { return new NetworkResponse(HttpStatusCode.NotModified, null, responseHeaders, true, SystemClock.ElapsedRealtime() - requestStart); } //entry.ResponseHeaders = entry.ResponseHeaders.Intersect(responseHeaders).ToDictionary(x => x.Key, x => x.Value); return new NetworkResponse(HttpStatusCode.NotModified, entry.Data, entry.ResponseHeaders, true, SystemClock.ElapsedRealtime() - requestStart); } } throw new NetworkError(ex); } catch (TimeoutException) { AttempRetryOnException("connection", request, new TimeoutError()); } catch (IOException e) { HttpStatusCode statusCode = 0; NetworkResponse networkResponse = null; if (httpResponse != null) { statusCode = httpResponse.StatusCode; } else { throw new NoConnectionError(e); } if (statusCode == HttpStatusCode.MovedPermanently) { VolleyLog.E("Request at {0} has been redirected to {1}", request.OriginUrl, request.Url); } else { VolleyLog.E("Unexpected response code {0} for {1}", statusCode, request.Url); } if (responseContents != null) { networkResponse = new NetworkResponse(statusCode, responseContents, responseHeaders, false, SystemClock.ElapsedRealtime() - requestStart); if (statusCode == HttpStatusCode.Unauthorized || statusCode == HttpStatusCode.Forbidden) { AttempRetryOnException("auth", request, new AuthFailureError()); } else if (statusCode == HttpStatusCode.MovedPermanently || statusCode == HttpStatusCode.Moved) { AttempRetryOnException("redirect", request, new AuthFailureError(networkResponse)); } else { throw new ServerError(networkResponse); } } else { throw new NetworkError(networkResponse); } } } }
public HttpWebResponse PerformRequest(Request request, Dictionary<string, string> additionalHeaders) { if (UrlRewriter != null) { String rewritten = UrlRewriter.RewriteUrl(request.Url); if (!String.IsNullOrEmpty(rewritten)) { request.SetRedirectUrl(rewritten); } } var httpRequest = CreateHttpRequest(request); foreach (KeyValuePair<String, String> head in additionalHeaders) { try { httpRequest.Headers.Add(head.Key, head.Value); } catch (Exception) { continue; } } foreach (KeyValuePair<String, String> head in request.GetHeaders()) { try { httpRequest.Headers.Add(head.Key, head.Value); } catch (Exception) { continue; } } return (HttpWebResponse)httpRequest.GetResponse(); }