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

时间:2017-05-19 17:10:57

标签: c sockets http

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

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

GET from a terminal

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

the following information

  • http状态
  • 一些奇怪的数据:
    • 日期
    • 服务器
    • 上次修改
    • 的ETag
    • 接受-范围
    • 的Content-Length
    • 因人而异
    • 连接
    • 内容类型

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

1 个答案:

答案 0 :(得分:1)

您在终端上使用的第一个命令实际上是程序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分隔。因此,您需要从标题中获取信息以正确解释正文。在最简单的情况下,您可以删除标题。