2009-09-08 8 views

risposta

32

Se si desidera rilevare una risposta di reindirizzamento, invece di seguirlo creare automaticamente il WebRequest e impostare la proprietà AllowAutoRedirect-false:

HttpWebRequest request = WebRequest.Create(someUrl) as HttpWebRequest; 
request.AllowAutoRedirect = false; 
HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
if (response.StatusCode == HttpStatusCode.Redirect || 
    response.StatusCode == HttpStatusCode.MovedPermanently) 
{ 
    // Do something here... 
    string newUrl = response.Headers["Location"]; 
} 
+1

Non ho verificato questo da solo, ma ho appena trovato qualcosa che dice: "Se la proprietà HttpWebRequest.AllowAutoRedirect è false, HttpStatusCode.Found causerà il lancio di un'eccezione. " Fonte: http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Net/types/HttpStatusCode.htm –

+0

@Nathan: Non vedo come, dato che HttpStatusCode è un enum. La documentazione collegata (che deve terminare nel BTW ".html") sembra non essere aggiornata; quella frase era probabilmente un bug taglia-e-incolla. – devstuff

+0

BTW, puoi anche utilizzare HttpStatusCode.Redirect (un altro alias per 302), che è un po 'più ovvio. – devstuff

3

Come così:

HttpWebResponse response; 
int code = (int) response.StatusCode; 

Il codice dovrebbe essere

HttpStatusCode.TemporaryRedirect 
+1

HttpStatusCode.TemporaryRedirect è un 307. http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Net/types/HttpStatusCode.html#TemporaryRedirect –

+0

Ora posso vedere il codice di risposta, ma è ancora reindirizza e mi dà 'OK' –

+0

@Nathan Taylor: copio/incollato ciò che CURL mi ha dato usando curl -I "url" –

1

VB Net Cod e

Function GetRealUrl(someUrl As String) As String 
     Dim req As HttpWebRequest = TryCast(WebRequest.Create(someUrl), HttpWebRequest) 
     req.AllowAutoRedirect = False 
     Dim response As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse) 
     If response.StatusCode = HttpStatusCode.Redirect OrElse response.StatusCode = HttpStatusCode.MovedPermanently Then 
      ' Do something... 
      Dim newUrl As String = response.Headers("Location") 
      getrealurl = newUrl 
     Else 
      getrealurl = someUrl 
     End If 
End Function