2009-09-08 14 views
17

Korzystanie WebRequest Chcę wiedzieć, czy mogę dostaćJak sprawdzić odpowiedź 302? WebRequest

"302 Przeniesiony tymczasowo" zamiast

odpowiedź automatycznie uzyskać nowy adres URL.

+0

Dla .NET? Jawa? MSX? –

+3

WebRequest to klasa .NET. – jimyi

+0

Właściwie tagi mówią wszystko o kodzie. – Tarik

Odpowiedz

32

Jeśli chcesz wykryć odpowiedź przekierowania, zamiast po to automatycznie utworzyć WebRequest i ustawić właściwość AllowAutoRedirect do 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

Nie zweryfikowałem tego samodzielnie, ale właśnie znalazłem coś mówiącego: "Jeśli właściwość HttpWebRequest.AllowAutoRedirect jest false, HttpStatusCode.Found spowoduje zgłoszenie wyjątku. " Źródło: http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Net/types/HttpStatusCode.htm –

+0

@Nathan: Nie widzę jak, ponieważ HttpStatusCode jest wyliczeniem. Powiązana dokumentacja (musi się kończyć w ".html" BTW) wydaje się być nieaktualna; to zdanie było prawdopodobnie błędem wycinania i wklejania. – devstuff

+0

BTW, można również użyć HttpStatusCode.Redirect (inny alias dla 302), co jest bardziej oczywiste. – devstuff

3

tak:

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

Kod powinien być

HttpStatusCode.TemporaryRedirect 
+1

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

+0

Widzę teraz kod odpowiedzi, ale nadal przekierowuje i daje mi "OK" –

+0

@Nathan Taylor: Kopiuję/wklejam to, co CURL dał mi za pomocą 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 
Powiązane problemy