【问题标题】:How to handle HTTP Connect in .NET?如何在 .NET 中处理 HTTP 连接?
【发布时间】:2011-09-15 13:01:43
【问题描述】:

我想在非常低的级别上处理 HTTP - 目前我被 HTTP CONNECT 动词卡住了。看起来HttpListener 无权访问这些请求,因为它们是在 HTTP API 或 HTTP.SYS 中的某处处理的。我可以使用本机 TcpListener 处理此类请求,但在这种情况下,我将失去所有 HTTP 功能 = 我将从头开始实现 HTTP。

我还检查了 FiddlerCore,但它也在某些 Win API 层上处理这些请求。有没有纯 .NET HTTP 堆栈?

编辑:我正在使用 HTTP 代理进行一些额外的请求分析和统计,因此我不想丢失 HTTP 解析,同时我想了解 SSL 连接。

【问题讨论】:

  • 你所说的“纯 .NET HTTP 堆栈”是什么意思 - 一个在 .NET 中实现但不使用 HTTP.SYS 等的堆栈?如果是的话,有一些第 3 方堆栈...
  • 如果您想在非常低的级别上处理 HTTP,您真的会失去 Http* 类中的所有 HTTP 功能。问题是什么?
  • 如果需要,请使用 TCP 套接字,使用 c# 中的“winsock2.dll”互操作调用
  • BTW HTTP CONNECT 是实现 HTTP 代理 AFAIK 的动词 - 这是您需要实现的吗?

标签: c# .net http ssl tcp


【解决方案1】:

使用 Tcp* 和 Socket*,而不是 Http* 相关的类在 .NET 中使用 真的低级别。

TCP 位于 HTTP 协议栈的底部。

如果您愿意,可以使用 TCP 套接字,只需使用 c# 中的“winsock2.dll”互操作调用,以及所有相关的东西,如结构定义等,或者使用本机 C++

【讨论】:

    【解决方案2】:

    好吧,如果您正在构建您的自定义 HTTP/HTTPS 服务器或代理并且您不介意第三方组件,那么我们的 SecureBlackbox 包含 HTTP/HTTPS 服务器组件,几乎可以让您对任何动词执行任何操作。纯 .NET,使用任何套接字类。

    【讨论】:

      【解决方案3】:

      好的。同样,问题不在于 API,而在于开发人员 :)

      我有一些测试套件来测试我的实现,但测试套件直接连接(而不是代理) - 这是第一个问题。第二个问题是,如果我想单独测试 Connect 动词,这个测试套件应该使用 TcpClient 而不是 HttpWebRequest,因为 HttpWebRequest 仅在使用 HTTPS 代理时在内部使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-08
        • 2023-01-16
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多