2010-04-08 8 views
27

Ho un URL che restituisce un reindirizzamento HTTP 302 e desidero ottenere l'URL a cui reindirizza.Come ottenere la posizione da un client Web su un reindirizzamento HTTP 302?

Il problema è che System.Net.WebClient sembra effettivamente seguirlo, il che è male. HttpWebRequest sembra fare lo stesso.

Esiste un modo per effettuare una richiesta HTTP semplice e recuperare la posizione di destinazione senza che WebClient lo segua?

Sono tentato di fare una comunicazione raw socket come HTTP è abbastanza semplice, ma il sito utilizza HTTPS e non voglio fare il Handshaking.

Alla fine, non mi importa quale classe che uso, io non voglio che seguire HTTP 302 Redirect :)

risposta

17

Su HttpWebRequest è possibile impostare AllowAutoRedirect-false per gestire il reindirizzamento da soli.

14

Il HttpWebRequest ha una proprietà AllowAutoRedirect che è possibile impostare su falso (it is always true for WebClient) e quindi ottenere l'intestazione HTTP Location.

+0

Una buona nota, ed è nascosto nella pagina proprio sopra la sezione a cui questo link punta. https://msdn.microsoft.com/en-us/library/system.net.webclient.aspx?f=255&MSPPError=-2147217396#Examples – dragon788

20

E 'abbastanza facile da fare

Supponiamo che hai creato un HttpWebRequest myRequest chiamato

// 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 
} 

scusa per eventuali errori di compilazione non ho VS proprio di fronte a me, ma ho usato questo in passato per controllare i reindirizzamenti.

+0

Aggiunto il reindirizzamento permesso come falso, poiché questo è parte dell'OP originale. – Justin

+1

Typo: 'AllowAutoRedirect' not' AutoAllowRedirect' –

+0

@JohnDyer grazie John Ho aggiornato l'esempio! – Justin

0

Inoltre, per qualcuno che ha appena bisogno della nuova posizione, HttpResponseMessage ha una proprietà RequestMessage. A volte può essere utile, perché WebClient non supporta la modifica della proprietà AllowAutoRedirect una volta che è stata impostata.

Problemi correlati