класс заголовков веб-клиента - PullRequest
1 голос
/ 01 июля 2010

Я использую класс WebClient с файлами cookie, как упомянуто здесь: Использование CookieContainer с классом WebClient

Какие шаги необходимы для добавления пользовательского агента пользователя к каждому запросу, сделанному этим WebClient?

Я попытался поместить строку

Headers.Add(HttpRequestHeader.UserAgent, "...") 

в

protected override WebRequest GetWebRequest

, но это не сработало: «Этот заголовок должен быть изменен с использованием соответствующего свойства».

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

из http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx,

using System;
using System.Net;
using System.IO;

    public class Test
    {
        public static void Main (string[] args)
        {
            if (args == null || args.Length == 0)
            {
                throw new ApplicationException ("Specify the URI of the resource to retrieve.");
            }
            WebClient client = new WebClient ();

            // Add a user agent header in case the 
            // requested URI contains a query.

            client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

            Stream data = client.OpenRead (args[0]);
            StreamReader reader = new StreamReader (data);
            string s = reader.ReadToEnd ();
            Console.WriteLine (s);
            data.Close ();
            reader.Close ();
        }
    }
0 голосов
/ 10 января 2011

Вроде поздний ответ, но здесь он идет; У меня была та же проблема, что и у вас, и я решил ее, добавив строку в пример, который вы связали:

public class CookieAwareWebClient : WebClient
{
    private CookieContainer m_container = new CookieContainer();

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).UserAgent       = "CUSTOM USERAGENT HERE";
            (request as HttpWebRequest).CookieContainer = m_container;
        }
        return request;
    }
}
...