Подтвердить что ты не робот

Получение местоположения из WebClient в HTTP 302 Redirect?

У меня есть URL-адрес, который возвращает перенаправление HTTP 302, и я хотел бы получить URL-адрес, который он перенаправляет.

Проблема в том, что System.Net.WebClient, похоже, действительно следует за ним, что плохо. HttpWebRequest, похоже, делает то же самое.

Есть ли способ сделать простой HTTP-запрос и вернуть целевое местоположение без последующего WebClient?

У меня возникает соблазн выполнить грубую связь сокетов, поскольку HTTP достаточно прост, но сайт использует HTTPS, и я не хочу выполнять Handshaking.

В конце концов, мне все равно, какой класс я использую, я просто не хочу, чтобы он следил за HTTP 302 Redirects:)

4b9b3361

Ответ 1

В HttpWebRequest вы можете установить AllowAutoRedirect в false, чтобы обработать перенаправление самостоятельно.

Ответ 2

Это довольно легко сделать

Предположим, вы создали 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 прямо передо мной, но я использовал это в прошлом, чтобы проверить перенаправления.

Ответ 4

Кроме того, для тех, кому просто нужно новое местоположение, HttpResponseMessage имеет свойство RequestMessage. Иногда это может быть полезно, потому что WebClient не поддерживает изменение свойства AllowAutoRedirect после его установки.