如何在http头文件中查找内容长度int



我正在尝试在头文件中查找内容长度的整数。我们目前正在使用适用于某些网站的东西,但不适用于较大的文件(超过9999字节)。我们如何才能在特定标头的末尾找到换行符,以便准确地获得内容长度的整数?

content_length = headers[headers.find("Content-Length: ")+16:headers.find("Content-Length: ")+20]

我会尝试搜索"\r\n",但这是有问题的,因为http标头中有很多。不幸的是,我们无法访问urllib。

标题示例:

GET http://example.com/ HTTP/1.1rn
Content-Length: 95972rn
Keep-Alive: 300rn
Connection: keep-alivernrn

简单。假设您的标题存储到一个字符串中:

for line in headers:
    if "Content-Length:" in line:
        contentLength = line
contentLength = contentLength[16:]

注意:并非所有HTTP标头都包含Content-Length,有些标头可能包含多个Content-Lengage。

标头以"\r\n"结尾,而不是单独的"\n"。请阅读HTTP的RFC。

所以,您应该阅读Content-Length标题,直到您点击字符"\r",然后您可以检查下一个字符将是"\n"进行确认。

或者正则表达式可以是:"内容长度:\s+\d+\s+"

编辑是的,正文中可能有很多"\r\n",但您不必全部解析,只需迭代用"\r\n"分隔的头行,并获得以"Content-Length"开头的行,这就是您要查找的。此外,HTTP消息正文将在"\r\n\r\n"之后开始。

最新更新