【问题标题】:C++ Windows Sockets: Downloading an html file [closed]C++ Windows 套接字:下载 html 文件 [关闭]
【发布时间】:2016-05-27 02:40:53
【问题描述】:

鉴于:
假设我有一个名为“exampledomain.com”的网站,并且在该网站上,我有一个名为“my_doc.html”的文件,其完整的 URL 地址是“https://www.exampledomain.com/my_directory/my_doc.html”。 (不是我的实际网站;这只是假设)。

目标:
我正在尝试使用 C++ 和 Windows 套接字开发一个客户端应用程序,它会下载我的 HTML 文件、解析它、提取一些特定信息、运行一些计算并将其结果显示给用户。

问题:
如何使用 Windows 套接字库将 HTML 文件从服务器下载到客户端计算机上的目录“C:/ExampleDirectory/”?*

澄清:
我想编写这个客户端程序来使用现有的网站。 IE:我希望它以与 Microsoft Edge 等 Internet 浏览器相同的方式下载文件。

编辑: 澄清一下,服务器使用基于帐户的安全系统,因此文档将使用 HTTPS 传输。我不确定这是否会影响解决方案,但我认为值得一提。

【问题讨论】:

标签: html c++ windows sockets download


【解决方案1】:

不要。

套接字库不是与网络服务器通信的合适工具。 http 非常复杂,以至于您想使用专门的 http 库。有几个这样的库可用。 curllib 浮现在脑海中。当然还有 WinHttp 标签https://stackoverflow.com/tags/winhttp/info

对于 html 部分,您需要使用 html 解析库来提取所需的信息。

【讨论】:

  • 相反。 HTTP 是客户端最容易实现的协议之一。这不应该花费超过几十行来实现。 getaddrinfo()、socket()、connect()、write()、read()。你完成了。唯一需要知道的是 HTTP 消息的格式:“GET HTTP/1.0\r\nHost: \r\n\r\n”。结束。这不是航天科技。附言嗯,也许还有六行代码来处理代理。
  • @Sam 那么你为 300 做了什么?字符编码?压缩?
  • 这在 0.9 的鼎盛时期可能是正确的。现在没那么多了。
  • 如果您没有发送适当的标题来表明您接受压缩内容,您将不会收到它。编码同上。如果你没有在 Accept-Encoding: 中指定月亮,你就不用担心编码问题。而且,就处理重定向而言,你得到了我:另外十几行代码要忍受。
  • Google 中有大量关于使用套接字 API 的文档,以及 HTTP/1.1 的文档(尽管我已经指出,您应该坚持使用简单的 HTTP/1.0 功能,因为那是这里需要的一切)。软件开发人员可以获得的最有价值的技能是学习如何追踪、阅读和理解技术文档。
猜你喜欢
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多