web-dev-qa-db-ja.com

HTTP 302リダイレクトでWebクライアントから場所を取得しますか?

HTTP 302リダイレクトを返すURLがあり、リダイレクト先のURLを取得したいと思います。

問題は、System.Net.WebClientが実際にそれに従っているように見えることですが、これは悪いことです。 HttpWebRequestも同じように見えます。

単純なHTTPリクエストを作成し、WebClientがそれに従わずにターゲットの場所を取得する方法はありますか?

HTTPは十分に単純なので、rawソケット通信を実行したくなりますが、サイトはHTTPSを使用しており、ハンドシェイクは実行したくありません。

最後に、どのクラスを使用するかは気にしません。HTTP302リダイレクトに従わせたくないだけです:)

27
Michael Stum

HttpWebRequestでは、AllowAutoRedirectfalseに設定して、リダイレクトを自分で処理できます。

17
AxelEckenberger

とても簡単です

MyRequestというHttpWebRequestを作成したとしましょう。

// 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が目の前にないコンパイルエラーはすみませんが、過去にこれを使用してリダイレクトをチェックしました。

21
Justin

HttpWebRequestにはプロパティ AllowAutoRedirect があり、これをfalseに設定できます( WebClient の場合は常にtrueです)、次に、 Location HTTPヘッダーを取得します。

14
Lucero

また、新しい場所が必要な場合は、HttpResponseMessageRequestMessageプロパティがあります。 WebClientは、一度設定するとAllowAutoRedirectプロパティの変更をサポートしないため、便利な場合があります。

0
yuyoyuppe