gpt4 book ai didi

c# - 带冒号的 HttpRequestMessage UserAgent

转载 作者:行者123 更新时间:2023-12-05 05:25:46 25 4
gpt4 key购买 nike

我正在尝试发送一个将其用户代理设置为带有冒号的内容的请求,但是 HttpRequestMessage提示冒号是无效字符。

确切的代码看起来像这样:

HttpClient client = new HttpClient();

var request = new HttpRequestMessage()
{
RequestUri = new Uri("some-uri"),
Method = HttpMethod.Post
};

request.Headers.Add("User-Agent", "Sample:Text");

// then send the request...

我浏览了 this SO post在这里你可以看到用户代理的 EBNF 和 this RFC它指定了 CTL 是什么。

第一个链接表明以下是有效的用户代理:

token = 1*<any CHAR except CTLs or separators>

第二个链接将 CTL 定义为:

any US-ASCII control character (octets 0 - 31) and DEL (127)

但是,冒号 ( :) 在 ASCII 表中是 58,所以我不明白为什么这是个问题。

我假设 HttpRequestMessage不喜欢其中的冒号,因为它没有转义——它可能认为它是一个分隔符。但我尝试用单引号、双引号等转义它。

有没有办法逃避我所缺少的?

换句话说,如何在 : 的用户代理 header 中正确发送冒号 ( HttpRequestMessage ) ?

最佳答案

正如我所怀疑的那样,这是一个逃避问题。 HttpRequestMessage 似乎没有处理自动转义。

在将冒号添加到 User-Agent header 之前,我可以使用 Uri.EscapeDataString() 转换冒号。当我在端点上处理用户代理时,我必须使用 Uri.UnescapeDataString()

不太漂亮,但它似乎有效。

关于c# - 带冒号的 HttpRequestMessage UserAgent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com