Exemple #1
0
		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));
         }
     }
 }
Exemple #3
0
        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;      

        }
Exemple #4
0
 public HttpResponse Execute(HttpRequest request, HttpBehavior httpBehavior)
 {
     return Navigate(request, httpBehavior);
 }
Exemple #5
0
 public HttpResponse Execute(HttpRequest request)
 {
     return Navigate(request, null);
 }
Exemple #6
0
	    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);
        }
Exemple #7
0
		public abstract void SendRequestHeaderAndEntity(HttpRequest request, HttpEntity httpEntity, bool expectContinue);
Exemple #8
0
		public abstract void SendRequestHeader(HttpRequest request);