C HTTP协议:消息正文的结尾

C HTTP协议:消息正文的结尾,c,http,C,Http,我建立了一个程序来解析标题,我想在收到帖子的情况下阅读邮件正文 对于标题,我已经能够查找以确定标题何时结束。我对邮件正文有更多问题。我是否应该查看“内容长度”字段以知道何时停止读取输入?在我当前的代码(如下)中,在我点击Firefox中的红十字(停止加载页面)之前,它不会停止 代码如下: size_t n; unsigned char newChar; int index = 0; int capacity = 50; char *option = (char *) malloc(sizeof

我建立了一个程序来解析标题,我想在收到帖子的情况下阅读邮件正文

对于标题,我已经能够查找以确定标题何时结束。我对邮件正文有更多问题。我是否应该查看“内容长度”字段以知道何时停止读取输入?在我当前的代码(如下)中,在我点击Firefox中的红十字(停止加载页面)之前,它不会停止

代码如下:

size_t n;
unsigned char newChar;

int index = 0;
int capacity = 50;
char *option = (char *) malloc(sizeof(char) * capacity); 

while ( ( n = read( req->socket, &newChar, sizeof(newChar) ) ) > 0 ) {
  if (newChar == '\0' || newChar == '\n') break; // This is not working

  if (index == capacity) {
    capacity *= 2;
    option = (char *) realloc(option, sizeof(char) * capacity);
    assert(option != NULL);
  }
  option[index++] = newChar;
  fprintf(stderr, "%c", newChar);
}

if (index == capacity) {
  capacity *= 2;
  option = (char *) realloc(option, sizeof(char) * capacity);
  assert(option != NULL);
}
option[index] = '\0';
正确的输入被打印出来,但我想知道为什么直到按下停止加载按钮它才会停止。我想知道是否有其他解决方案,或者我是否需要使用标题中的“内容长度”字段

多谢各位


Jary

此代码在read()上阻塞,等待另一个永远不会出现的字符

此外,.7.1规定HTTP应用程序必须接受CRLF、bare CR和bare LF作为通过HTTP接收的文本媒体中的换行符的代表。此外,如果文本在一个字符集中表示,而该字符集不分别使用八位字节13和10表示CR和LF,就像某些多字节字符集的情况一样,HTTP允许使用该字符集定义的任何八位字节序列来表示换行符的CR和LF的等效值。”


<>你需要抓住的不仅仅是“\n”。

有一些事情要考虑。你可能想考虑一下如何处理所有这些情况?
  • 对于HTTP协议1.0,连接关闭用于表示数据结束

  • 这在支持持久连接的HTTP 1.1中得到了改进。对于HTTP 1.1,您通常设置或读取内容长度头,以了解需要多少数据

  • 最后,在HTTP 1.1中,也有可能使用“Chunked”模式,您可以在它们出现时获得大小,并且您知道当找到chunk size==0时,您已经到达了末尾


您还知道吗?这肯定会帮助您重新实施控制盘。

谢谢您提供的所有信息,我想我只需要实施其中的一到两种情况。谢谢!