c# - 在 HTTP CONNECT over SSL 期间设置用户代理 header ?

标签 c# .net ssl webclient user-agent

我正在使用 WebClient .NET 2.0 中的类以通过 SSL 执行 HTTP POST。

目前我正在手动设置用户代理 header ,如下所示:

wc = new WebClient();
wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

这工作正常,除了当我通过执行 HTTP 隧道的代理服务器发出请求并期望 HTTP CONNECT 命令中的特定用户代理 header 时。

当代理充当 SSL 的隧道时,它最初会收到一个 HTTP CONNECT,告诉它客户端正在尝试连接到哪里。

问题是,如果您通过 HttpWebRequest.UserAgent 或 WebClient.Headers.Add 在 .NET 中设置用户代理 header ,它不会将其添加到初始 CONNECT 请求中。它确实会将其添加到后续的 SSL 流量中,但这不是所需要的。

如果这是 C++,我会简单地调用 WinHttpOpen() 来创建 session 并设置 pwszUserAgent 参数来为整个 session 设置用户代理。不幸的是,我在 .NET 中找不到等效项。

谁能指出我正确的方向?我确信其他人一定遇到过在 .NET 中构建客户端应用程序的问题。

最佳答案

您将无法使用 HttpWebRequest 系列类发送 User-Agent header 。 RFC 说 header 是可选的(应该而不是必须)

您可以向代理添加规则以允许没有 User-Agent header 的连接,或针对特定目标服务器,或者最终使用 .NET 套接字类编写您自己的 HTTP 协议(protocol)。

关于c# - 在 HTTP CONNECT over SSL 期间设置用户代理 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378031/

相关文章:

.net - Visual Studio中的源文件编码(VS2005,但可以应用于其他版本)

security - EGit 使用 1024 位或 2018 位 SSL?

jquery - 无法 POST 到 IHTTPHandler 类,Access-Control-Allow-Origin 不允许来源

c# - 在动态方法中使用正则表达式

c# - UTF-8 不适用于将 byte[] 转换为字符串

.net - 在 .NET 应用程序中嵌入/部署自定义字体

Java 无法使用有效的 SSL 证书

c# - 映射 SPA 之外的特定路线 asp.net core

c# - 找不到包 'Microsoft.AspNet.WebApi.Client' .Net Core 2.2 的编译库位置

c# - 应用程序变量总是引用我的对象,我希望它保持 "copy"