c# 如何在用户代理中设置符号

c# how to set symbol in useragent

我想使用 HttpClient 像这样设置 useragent

"Dalvik/2.1.0 (Linux; U; Android 5.1.1; YAL-AL10 Build/LMY48Z) [something]"

但是useragent不允许使用符号[]

有人知道如何解决这个问题吗?

httpRequestMessage.Headers.Add("User-Agent", "myCustomUserAgent [xx]");

会抛出异常

在 System.Net.Http.Headers.HttpHeaderParser.ParseValue(String value, Object storeValue, Int32& index)
   在 System.Net.Http.Headers.HttpHeaders.ParseAndAddValue(String name, HeaderStoreItemInfo info, String value)
   在 System.Net.Http.Headers.HttpHeaders.Add(String name, String value)
   在 Facebook_scan.Form1.<ttt>d__39.MoveNext() 在 D:\c#\Facebook_scan\Facebook_scan\Form1.cs 中: 第 237 行

如果你真的需要这样做...我想你可以使用 TryAddWithoutValidation 如果 HttpClient 过于严格 parsing headers

Returns a value that indicates whether a new header and its values were added to the HttpHeaders collection without validating the provided information.

var funkyUserAgent = "Dalvik/2.1.0 (Linux; U; Android 5.1.1; YAL-AL10 Build/LMY48Z) [something]"

httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", funkyUserAgent);

// or

var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Headers.TryAddWithoutValidation("User-Agent", funkyUserAgent);

注意 :您真的应该检查 return 值 :)

例子

var httpClient = new HttpClient();
var funkyUserAgent = "Dalvik/2.1.0 (Linux; U; Android 5.1.1; YAL-AL10 Build/LMY48Z) [something]";
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://postman-echo.com/headers");
httpRequestMessage.Headers.TryAddWithoutValidation("User-Agent", funkyUserAgent);


var result = await httpClient.SendAsync(httpRequestMessage);
var content = await result.Content.ReadAsStringAsync();
Console.WriteLine(content);

输出

{
   "headers":{
      "x-forwarded-proto":"https",
      "x-forwarded-port":"443",
      "host":"postman-echo.com",
      "x-amzn-trace-id":"Root=1-5fcf4709-35d9a93c0e1703920c572b7e",
      "user-agent":"Dalvik/2.1.0 (Linux; U; Android 5.1.1; YAL-AL10 Build/LMY48Z) [something]"
   }
}

Full Demo Here