AllowAutoRedirectをfalseに設定し、HTTPリダイレクトステータスコードに応答することで、これを実現できます。 HTTPステータスコードの完全なリストについては、W3Cを参照してください。ここでは(エラー処理の詳細は省略)小さなコードの例です:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://americanexpress.com");
webRequest.AllowAutoRedirect = false;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
int redirCount = 0;
while (webResponse.StatusCode == HttpStatusCode.TemporaryRedirect ||
webResponse.StatusCode == HttpStatusCode.MovedPermanently ||
webResponse.StatusCode == HttpStatusCode.MultipleChoices ||
webResponse.StatusCode == HttpStatusCode.Found ||
webResponse.StatusCode == HttpStatusCode.SeeOther)
{
string location = webResponse.Headers["Location"];
redirCount++;
Console.Out.WriteLine("Redirection location: {0}", location);
webRequest = (HttpWebRequest)WebRequest.Create(location);
webRequest.AllowAutoRedirect = false;
webResponse = (HttpWebResponse)webRequest.GetResponse();
}
EDIT: 私はちょうど のHttpWebRequestクラスにMaximumAutomaticRedirectionsというプロパティがあることに気づきました。したがって、HttpWebRequestクラスは、最大許容リダイレクトを処理するために リダイレクションの数を数えなければなりません。私は、HttpWebRequestクラスの ソースコードをデバッグし、_AutoRedirections というプライベートフィールドを見つけました。リダイレクトの数を数えます。
ので、リダイレクトの数を取得するためにはるかに簡単な解決策は次のようになります。
public class HttpWebRequestAdapter
{
private readonly HttpWebRequest _request;
public HttpWebRequestAdapter(HttpWebRequest request)
{
_request = request;
}
public int NumberOfRedirects
{
get
{
FieldInfo fi = _request.GetType().GetField("_AutoRedirects", BindingFlags.NonPublic | BindingFlags.Instance);
return (int)fi.GetValue(_request);
}
}
}
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://americanexpress.com");
webRequest.AllowAutoRedirect = true;
webRequest.MaximumAutomaticRedirections = 10;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
HttpWebRequestAdapter adapter = new HttpWebRequestAdapter(webRequest);
Console.Out.WriteLine(adapter.NumberOfRedirects);
のEND EDIT
希望、このことができます。
可能性のある複製http://stackoverflow.com/questions/3404493/httpwebrequest-httpwebresponse-redirect-count(これは、手動で唯一の方法かもしれません)。 – Aaron