如何在HttpClient上设置默认用户代理?

100

HttpRequest设置用户代理很容易,但通常我想使用一个单独的HttpClient并且每次都使用相同的用户代理,而不是在每个请求上都设置它。

5个回答

151
你可以轻松地使用以下方法解决:

HttpClient _client = new HttpClient();
_client.DefaultRequestHeaders.Add("User-Agent", "C# App");

98

DefaultRequestHeaders.Add(...) 对我无效。

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (compatible; AcmeInc/1.0)");

1
这应该是被接受的答案。 - Owen
我用word-word-name.name@domain.com尝试了一下,但失败了,它需要更标准的UA格式,所以我将其更改为Mozilla/5.0 (compatible; word-word-name.name@domain.com)。 - Jeff

19

在一个.NET Standard 2.0库中,以下内容对我起作用:

HttpClient client = new HttpClient();
ProductHeaderValue header = new ProductHeaderValue("MyAwesomeLibrary", Assembly.GetExecutingAssembly().GetName().Version.ToString());
ProductInfoHeaderValue userAgent = new ProductInfoHeaderValue(header);
client.DefaultRequestHeaders.UserAgent.Add(userAgent);
// User-Agent: MyAwesomeLibrary/1.0.0.0

4
简短附加说明:UserAgent类还提供了TryParse方法,特别适用于没有版本号的情况下(出于任何原因)。RFC明确允许这种情况。 - JensG

18

根据JensG的评论,可以简单地使用UserAgent类的TryParse方法来设置默认的用户代理,这在没有版本号(无论出于什么原因)时非常方便。RFC明确允许这种情况。

参考此答案

using System.Net.Http;
using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders
      .UserAgent
      .TryParseAdd("Mike D's Agent");
    //User-Agent: Mike D's Agent
}

我认为那行代码实际上什么也没做,只是返回了false? - Michael Schönbauer

-1
string agent="ClientDemo/1.0.0.1 test user agent DefaultRequestHeaders";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("User-Agent", agent);

备注:使用此结构生成代理名称 用户代理:产品/产品版本注释

  • 产品:产品标识符
  • 产品版本:产品版本号。
  • 注释:包含产品的一个或多个信息注释,例如。

参考资料


注释应该用"("和")"括起来。 - MikeJ

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