【问题标题】:HTTP request does not workHTTP 请求不起作用
【发布时间】:2014-03-26 06:42:52
【问题描述】:

我正在使用 winsock 用 c++ 编写某种浏览器,但遇到了某种错误。该程序适用于互联网上的某些页面,但由于某种原因,它并不适用于所有页面。 https://imageshack.com/a/v56q/1

从这些图像中可以看出,Fiddler 的组合版本在我自己的程序失败时工作。 我认为也许 HTTPS 连接可能是问题所在,但它似乎甚至不需要握手或类似的东西。程序的发送部分当然不是问题,因为它可以与其他页面(例如 cmets 中的页面)一起使用。

提前致谢!

【问题讨论】:

  • 把图片放在问题里。你需要额外的问题信息。代码、结构、日志和其他工件是了解您的问题的最佳方式。

标签: c++ http https winsock fiddler


【解决方案1】:

我认为可能是 HTTPS 连接有问题,但它似乎甚至不需要握手或类似的东西。

是的,HTTPS 要求您执行相当复杂的握手,这就是为什么基本上没有人尝试直接在套接字上实现 HTTPS,而是使用 WinHTTP 或 WinINET,Windows 中包含的两个 HTTP 堆栈。

当 Fiddler 运行时,您可以通过向 Fiddler 发送纯文本请求(包含 HTTPS url)来进行“欺骗”,Fiddler 将代表您与远程服务器执行正确的安全握手,然后将响应返回给您的客户。 (在这种情况下,Fiddler 充当 HTTP-to-HTTPS 网关

【讨论】:

  • 如果您想直接进行 Winsock 开发,请使用 OpenSSL。
  • 是的,OpenSSL,加上编写自己的 HTTP 堆栈(至少几百行)以及证书管理等。这是一项相当大的投资。
  • OpenSSL 完成大部分的证书管理。但是,是的,实现 HTTP 堆栈可能非常复杂。但是,它也是编写网络协议的一个很好的练习,如果您希望您的代码在 Windows 以外的其他平台上工作,而不需要使用 libcurl 之类的第三方库,那么它是可移植的。
  • 如果你的目标是学习一些东西,编写自己的堆栈是一个很好的方法。如果您的目标是交付生产就绪的安全敏感代码,那么重用是唯一明智的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 2018-04-24
  • 2016-09-21
  • 1970-01-01
  • 2015-10-17
  • 2014-03-31
相关资源
最近更新 更多