2009-09-08 14 views

Répondre

32

Si vous voulez détecter une réponse de redirection, au lieu de la suivre crée automatiquement les WebRequest et définissez la propriété 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

Je ne l'ai pas vérifié moi-même, mais je viens de trouver quelque chose disant: "Si la propriété HttpWebRequest.AllowAutoRedirect est false, HttpStatusCode.Found provoquera l'émission d'une exception. " Source: http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Net/types/HttpStatusCode.htm –

+0

@Nathan: Je ne vois pas vraiment comment, puisque HttpStatusCode est une énumération. La documentation liée (doit se terminer par '.html' BTW) semble être obsolète; cette phrase était probablement un bug de couper-coller. – devstuff

+0

BTW, vous pouvez également utiliser HttpStatusCode.Redirect (un autre alias pour 302), ce qui est un peu plus évident. – devstuff

3

comme ceci:

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

Le code doit être

HttpStatusCode.TemporaryRedirect 
+1

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

+0

Je peux maintenant voir le code de réponse, mais il reste redirige et me donne 'OK' –

+0

@Nathan Taylor: J'ai copié/collé ce que CURL m'a donné en utilisant 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