C HTTP协议:消息正文的结尾
我建立了一个程序来解析标题,我想在收到帖子的情况下阅读邮件正文 对于标题,我已经能够查找以确定标题何时结束。我对邮件正文有更多问题。我是否应该查看“内容长度”字段以知道何时停止读取输入?在我当前的代码(如下)中,在我点击Firefox中的红十字(停止加载页面)之前,它不会停止 代码如下:C HTTP协议:消息正文的结尾,c,http,C,Http,我建立了一个程序来解析标题,我想在收到帖子的情况下阅读邮件正文 对于标题,我已经能够查找以确定标题何时结束。我对邮件正文有更多问题。我是否应该查看“内容长度”字段以知道何时停止读取输入?在我当前的代码(如下)中,在我点击Firefox中的红十字(停止加载页面)之前,它不会停止 代码如下: size_t n; unsigned char newChar; int index = 0; int capacity = 50; char *option = (char *) malloc(sizeof
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时,您已经到达了末尾
您还知道吗?这肯定会帮助您重新实施控制盘。谢谢您提供的所有信息,我想我只需要实施其中的一到两种情况。谢谢!