如何在C#中使用System.Net.WebRequest设置用户代理

15
我正在尝试使用 WebRequest 设置用户代理,但不幸的是,我只找到了如何使用 HttpWebRequest 进行设置。以下是我的代码,请帮助我使用 WebRequest 设置 User-Agent。
以下是我的代码:
    public string Post(string url, string Post, string Header, string Value)
    {
        string str_ReturnValue = "";

        WebRequest request = WebRequest.Create(url);

        request.Method = "POST";
        request.ContentType = "application/json;charset=UTF-8";                        
        request.Timeout = 1000000;

        if (Header != null & Value != null)
        {
            request.Headers.Add(Header, Value);                                
        }

        using (Stream s = request.GetRequestStream())
        {
            using (StreamWriter sw = new StreamWriter(s))
                sw.Write(Post);
        }

        using (Stream s = request.GetResponse().GetResponseStream())
        {                
            using (StreamReader sr = new StreamReader(s))
            {
                var jsonData = sr.ReadToEnd();
                str_ReturnValue += jsonData.ToString();
            }
        }

        return str_ReturnValue;
    }

我尝试添加 request.Headers.Add("user-agent", _USER_AGENT); 但是我收到了一个错误信息。

3个回答

40

HttpWebRequest强制转换为HttpWebRequest,并使用UserAgent属性。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "my user agent";

作为替代,您可以使用WebRequest.CreateHttp而不是进行强制转换。


问题是我不能使用HttpWebRequest,因为我所做的Post请求不起作用,我已经改用了WebRequest来解决这个问题。 - enb141
1
@user1102989,你正在使用HttpWebRequest - 它是WebRequest的超类型。你所做的只是将类型更具体化。 - vcsjones
1
@user1102989 User Agent 是 HTTP 头中的一个字段,这意味着它是特定于 HTTP 协议的。因此,在 WebRequest 类上直接设置它没有意义,因为该类被设计为用于使用任何类型协议进行请求的基类。 - kamilk
感谢使用 HttpWebRequest 后,我能够设置我的 UserAgent。 - enb141
如果实例已存在为 WebRequest,则也可以仅转换属性;我因不想触及现有的遗留代码而遇到了这个问题。WebRequest request = WebRequest.Create(url); ((HttpWebRequest)request).UserAgent = "我的用户代理"; - goodeye
不想设置一个硬编码的值,我想在运行时从客户端获取一个有效的用户代理值,并将其设置为UserAgent属性。请问有什么好的方法吗? - Ashu

2
如果您尝试使用 HttpWebRequest 而不是基本的 WebRequest,则会有一个特定的属性暴露给 UserAgent。请参见:此处
// Create a new 'HttpWebRequest' object to the mentioned URL.
var myHttpWebRequest=(HttpWebRequest)WebRequest.Create("http://www.contoso.com");
myHttpWebRequest.UserAgent=".NET Framework Test Client";

// Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
var myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();

2
那么使用 WebRequest 没有添加 UserAgent 的方法吗? - enb141
1
我认为UserAgent应该是特定于HTTP web请求的。这就是为什么它不在基类“WebRequest”上的原因。如果您正在使用WebRequest.Create,则此工厂函数将创建HttpWebRequest对象(如上面的示例代码),因此您可以安全地转换并在那里使用UserAgent属性。 - Reddog
谢谢HttpWebRequest,我能够设置自定义用户代理。 - enb141

-1
WebRequest postrequest = WebRequest.Create("protocol://endpointurl.ext");
((System.Net.HttpWebRequest)postrequest).UserAgent = ".NET Framework"

2
我建议在这段代码中添加一些信息。 - abc123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接