http请求没有收到全部信息 – C.

连接到服务器后,我需要使用GET命令从中获取所有信息。 由于某种原因,我不允许在我的get命令之后输入\r\n ,因此我发送到服务器的命令类似于GET http://somethingrandom.com HTTP/1.0

在将请求发送到地址后,我没有收到与终端正常GET相同的输出:

从终端获取

更具体地说,我收到以下信息:

以下信息

  • http状态
  • 一些奇怪的数据:
    • 日期
    • 服务器
    • 最后修改
    • ETag的
    • 接受-范围
    • 内容长度
    • 变化
    • 连接
    • 内容类型

我认为\r\n的作用是完全忽略这些信息。 (在此示例中,额外的标记信息)。 如果它与我的代码有关(最有可能),我会在之后提供它。

您在终端上使用的第一个命令实际上是程序GET ,它使用Perl LWP库执行正确的HTTP请求,并为您提供响应。 您给出的命令末尾的HTTP/1.0实际上被忽略,因为只需要URL。 因此GET类似于curlwget 。 你甚至可以打电话给GET --help来确切使用。

你在C中尝试做的事情就是在没有任何库的情况下处理HTTP。 在这种情况下,您必须正确读取和解析响应,即,如果您使用这些命令, GETcurlwget命令的确切为您做的事情。 要正确执行此操作,您需要首先了解HTTP协议。 虽然HTTP / 1.0不是最新的标准,但我建议首先研究它,因为它是最简单的,它仍然被Web服务器接受。 有关标准,请参阅RFC 1945 。

从阅读标准,您将看到,有一个HTTP响应标题和正文,由\r\n分隔。 因此,您需要从标题中获取信息以正确解释正文。 在最简单的情况下,您可以删除标题。