WebRequest未重定向

时间:2016-10-09 17:02:14

标签: c# httprequest httpresponse

方法:

public RequestTest Test(string url)
    {
        var test = new RequestTest() { Url = url };
        var sw = new Stopwatch();
        var request = WebRequest.CreateHttp(test.Url);
        request.AllowAutoRedirect = true;
        request.Method = "HEAD";
        request.UserAgent = "Accept-Language: en-US,en;q=0.5";
        try
        {
            sw.Start();
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                sw.Stop();
                test.Time = (int)sw.ElapsedMilliseconds;
                test.StatusCode = response.StatusCode;
            }
            return test;
        }
        catch (WebException ex)
        {
            test.StatusCode = ((HttpWebResponse)ex.Response).StatusCode;
            return test;
        }
    }

网址为http://monosnap.com/page/faq,必须重定向到某个语言区域,例如 - http://monosnap.com/ru/page/faq

但它会抛出WebException,使用Message"无法解析远程名称:' page'"。

UPD:我添加了useragent

request.UserAgent = "Accept-Language: en-US,en;q=0.5";

但我仍然得到相同的例外情况"无法解析远程名称:' page'" 此外,重定向可以从我的浏览器正常工作。所以,问题在于代码。

1 个答案:

答案 0 :(得分:4)

对于您尝试访问的网站,只需添加“Accept-Language”标头即可:

using System;
using System.Diagnostics;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {

        public class RequestTest
        {
            public string Url { get; set; }
            public int Time { get; set; }
            public HttpStatusCode StatusCode { get; set; }
        }

        public static RequestTest Test(string url)
        {
            var test = new RequestTest() { Url = url };
            var sw = new Stopwatch();
            var request = WebRequest.CreateHttp(test.Url);
            request.AllowAutoRedirect = true;
            request.Method = "HEAD";
            request.Headers.Add("Accept-Language: ru-RU, en; q = 0.5");
            try
            {
                sw.Start();
                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    sw.Stop();
                    test.Time = (int)sw.ElapsedMilliseconds;
                    test.StatusCode = response.StatusCode;
                }
                return test;
            }
            catch (WebException ex)
            {
                test.StatusCode = ((HttpWebResponse)ex.Response).StatusCode;
                return test;
            }
        }

        static void Main(string[] args)
        {
            var x =  Test("http://monosnap.com/page/faq");
            Console.WriteLine(x.StatusCode + " " + x.Time.ToString());
            Console.ReadLine();

        }
    }
}

示例输出:

  

确定186

如果无法确定语言,则重定向器似乎没有默认设置。

有关设置接受语言的更多信息:Setting language preferences in a browser