Ответ 1
В HttpWebRequest
вы можете установить AllowAutoRedirect
в false
, чтобы обработать перенаправление самостоятельно.
У меня есть URL-адрес, который возвращает перенаправление HTTP 302, и я хотел бы получить URL-адрес, который он перенаправляет.
Проблема в том, что System.Net.WebClient, похоже, действительно следует за ним, что плохо. HttpWebRequest, похоже, делает то же самое.
Есть ли способ сделать простой HTTP-запрос и вернуть целевое местоположение без последующего WebClient?
У меня возникает соблазн выполнить грубую связь сокетов, поскольку HTTP достаточно прост, но сайт использует HTTPS, и я не хочу выполнять Handshaking.
В конце концов, мне все равно, какой класс я использую, я просто не хочу, чтобы он следил за HTTP 302 Redirects:)
В HttpWebRequest
вы можете установить AllowAutoRedirect
в false
, чтобы обработать перенаправление самостоятельно.
Это довольно легко сделать
Предположим, вы создали HttpWebRequest с именем 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
}
Извините за ошибки компиляции. У меня нет VS прямо передо мной, но я использовал это в прошлом, чтобы проверить перенаправления.
HttpWebRequest
имеет свойство AllowAutoRedirect
, которое вы можете установить на false (это всегда верно для WebClient
), а затем получить Location
HTTP-заголовок.
Кроме того, для тех, кому просто нужно новое местоположение, HttpResponseMessage
имеет свойство RequestMessage
. Иногда это может быть полезно, потому что WebClient
не поддерживает изменение свойства AllowAutoRedirect
после его установки.