protected StringBuilder GetRequestHeader(HttpRequest request) { var sb = new StringBuilder(); sb.AppendLine(request.GetRequestLine(_proxy != null)); sb.AppendLine("Host: " + Uri.Host); sb.Append(request.Headers); return sb; }
internal void WriteCookiesToRequest(HttpRequest request) { string host = request.Uri.Host; if (this.m_cookieStore.ContainsKey(host)) { HttpCookieCollection cookieColl = this.m_cookieStore[request.Uri.Host]; if (cookieColl != null) { request.Headers.Add("Cookie", HTTPProtocol.GetCookiesHeader(cookieColl)); } } }
private HttpResponse Navigate(HttpRequest request, HttpBehavior httpBehavior) { request.Initiated = DateTime.UtcNow; if (request.Timeout == 0) request.Timeout = DefaultRequestTimeout; bool ContinueRedirect = true; HttpResponse response = null; var connFactory = new HttpConnectionFactory(); var connection = GetConnectionForUriScheme(connFactory, request.Uri); HttpBehavior.RedirectStep rs = null; string redirectUri = null; int responseCode = 0; int redirectCounter = 0; try { while (ContinueRedirect) { try { response = SendRequestAndGetResponse(connection, request); redirectUri = response.Location; responseCode = response.ResponseCode; // response code 100 means that we need to wait for another response // and receive the response from the socket again on the same connection if (responseCode == 100) { response = GetResponse(connection); redirectUri = response.Location; responseCode = response.ResponseCode; } if (httpBehavior != null) { rs = httpBehavior.GetNextStep(); rs.Compare(responseCode, redirectUri); ContinueRedirect = !httpBehavior.IsEmpty(); } else { ContinueRedirect = (redirectCounter < MaxRedirects && (responseCode == 301 || responseCode == 302)); redirectCounter++; } if (ContinueRedirect) { request = new HttpGet(new Uri(redirectUri)); // make sure the connection is still open and redirect url is from the same host connection = GetConnectionForUriScheme(connFactory, request.Uri); } } catch (Exception ex) { int i = 0; throw ex; } } } finally { connection.Close(); } return response; }
public HttpResponse Execute(HttpRequest request, HttpBehavior httpBehavior) { return Navigate(request, httpBehavior); }
public HttpResponse Execute(HttpRequest request) { return Navigate(request, null); }
private HttpResponse SendRequestAndGetResponse(Connection connection, HttpRequest request) { _cookieStore.WriteCookiesToRequest(request); // if we need to send a body (not only headers) if (request.GetType().GetInterface("HttpEntityEnclosingRequest") != null) { var heer = (HttpEntityEnclosingRequest)request; connection.SendRequestHeaderAndEntity(request, heer.Entity, heer.ExpectContinue); } else { connection.SendRequestHeader(request); } return GetResponse(connection); }
public abstract void SendRequestHeaderAndEntity(HttpRequest request, HttpEntity httpEntity, bool expectContinue);
public abstract void SendRequestHeader(HttpRequest request);