2010-04-08 14 views
27

que tienen una URL que devuelve una redirección HTTP 302, y me gustaría obtener la URL a la que apunta.Obteniendo la ubicación de un WebClient en un HTTP 302 Redirect?

El problema es que System.Net.WebClient parece seguir en realidad, lo que es malo. HttpWebRequest parece hacer lo mismo.

¿Hay una manera de hacer un simple petición HTTP y volver a la ubicación de destino sin que el cliente Web después de él?

Estoy tentado de hacer la comunicación conector directo como HTTP es bastante simple, pero el sitio utiliza HTTPS y no quiero hacer el apretón de manos.

Al final, no me importa qué clase utilizo, sólo que no quiero que siga HTTP 302 redirecciones :)

Respuesta

17

En HttpWebRequest puede establecer AllowAutoRedirect a false para manejar el mismo redirección.

14

HttpWebRequest tiene una propiedad AllowAutoRedirect que puede establecer en falso (it is always true for WebClient), y luego obtener el Location encabezado HTTP.

+0

buena nota, y que está escondido en la página derecha por encima de la sección que este enlace por puntos a. https://msdn.microsoft.com/en-us/library/system.net.webclient.aspx?f=255&MSPPError=-2147217396#Examples – dragon788

20

Es bastante fácil de hacer

Supongamos que haya creado una HttpWebRequest llamada myRequest

// don't allow redirects, they are allowed by default so we're going to override 
myRequest.AllowAutoRedirect = false; 

// send the request 
HttpWebResponse response = myRequest.GetResponse(); 

// check the header for a Location value 
if(response.Headers["Location"] == null) 
{ 
    // null means no redirect 
} 
else 
{ 
    // anything non null means we got a redirect 
} 

excusa ninguna errores de compilación no tengo VS justo en frente de mí, pero he Usé esto en el pasado para verificar las redirecciones.

+0

Se agregó el permiso de redirigir para que sea falso, ya que es parte del OP original. – Justin

+1

TIPO: '' No AllowAutoRedirect' AutoAllowRedirect' –

+0

@JohnDyer gracias John He actualizado el ejemplo! – Justin

0

Además, para alguien que solo necesita la nueva ubicación, HttpResponseMessage tiene una propiedad RequestMessage. A veces puede ser útil, porque WebClient no admite el cambio de la propiedad AllowAutoRedirect una vez que se ha establecido.

Cuestiones relacionadas