【问题标题】:How can I set the user-agent in the http header如何在 http 标头中设置用户代理
【发布时间】:2017-05-11 21:20:01
【问题描述】:

我正在尝试在 C# 中的覆盖函数 GetWebRequest 中的 http 标头中设置用户代理

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    System.Net.HttpWebRequest request = base.GetWebRequest(uri) as System.Net.HttpWebRequest;                
    request.Headers.Add("User-Agent", (someone@yahoo.com"));
    request.ProtocolVersion = System.Net.HttpVersion.Version10;
    request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
    request.KeepAlive = false;
    return request;
} 

我的请求被返回并出现错误,我被告知他们没有看到用户代理。我尝试了其他设置标头用户代理的方法,但到目前为止没有任何效果。我尝试过的其他一些方法是

request.Headers["User-Agent"] = "someone@yahoo.com");
request.UserAgent = "someone@yahoo.com";
request.Headers.Set("User-Agent", "someone@yahoo.com");

我尝试发送请求的网站告诉我,它需要一种方法来在出现问题时识别我们,并且“请确保您的请求包含“用户代理”http 标头。”他们给我发了一个例子,但它使用的是 CURL

curl_setopt($ch, CURLOPT_USERAGENT,'jeremy.fields@gmail.com)

【问题讨论】:

  • 您是否尝试使用“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 afari/537.36”设置用户代理?跨度>

标签: c# httpwebrequest user-agent


【解决方案1】:

User-agent 代表您的浏览器,例如 Firefox 或 Chrome

通过将其转换为 HttpWebRequest 来使用 HttpWebRequest 上的 UserAgent 属性

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

request = new HttpClient();
request.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0");

【讨论】:

    【解决方案2】:

    如果您编写自己的应用程序请求 http 内容,最好在用户代理中设置任何形式的标识。如果广为人知,它可以是电子邮件、网站或产品名称。

    根据HTTP specification用户代理中的产品令牌:

    (...) 应该简明扼要。他们不得 用于广告或其他非必要信息。虽然任何 标记字符可能出现在产品版本中,此标记应该 仅用于版本标识符(即,连续版本的 相同的产品应该只在产品版本部分不同 产品价值)。

    最简单的形式可以是以下之一

    request.UserAgent = "MyAppName/1.0.0";
    request.UserAgent = "MyAppName/1.0.0 (someone@example.com)";
    request.UserAgent = "MyAppName/1.0.0 (+http://www.example.com)";
    

    评论中的 URL 必须以 + 为前缀(由 Brendon 记录在 this answer 中)。另外值得注意的是,任何邮件地址都应该发给负责产品的公司或开发人员,而不是发给使用它的用户。

    如果您需要与现代浏览器兼容(如果您希望结果是 HTML,而不是带有 xml/json/等的 API),您还可以添加“默认”Mozilla 版本以及您的操作系统信息:

    request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) MyAppName/1.0.0 (someone@example.com)"
    

    最好发送正确的系统信息,而不是仅仅复制一个找到的带有错误操作系统信息的用户代理字符串。

    【讨论】:

      【解决方案3】:

      我认为您错误地使用了 User-Agent 标头。来自MSDN

      当您访问网页时,您的浏览器会将用户代理字符串发送到 托管您正在访问的站点的服务器。这个字符串 指示您正在使用的浏览器、版本号和详细信息 关于您的系统,例如操作系统和版本。网络 服务器可以使用此信息来提供量身定制的内容 适用于您的特定浏览器。

      该页面的示例:

      用户代理:Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) 喜欢 壁虎

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-21
        • 2010-09-14
        • 1970-01-01
        • 2023-03-10
        • 2022-11-17
        • 2016-08-18
        • 2020-11-18
        • 1970-01-01
        相关资源
        最近更新 更多