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

时间:2014-11-12 03:59:15

标签: python http networking

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

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

我会尝试搜索“\ r \ n”但这有问题,因为http标头中有很多。很遗憾,我们无法访问urllib。

示例标题:

GET http://example.com/ HTTP/1.1\r\n
Content-Length: 95972\r\n
Keep-Alive: 300\r\n
Connection: keep-alive\r\n\r\n

2 个答案:

答案 0 :(得分:1)

简单。假设您的标题存储为字符串:

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

contentLength = contentLength[16:]

警告:并非所有HTTP标头都包含Content-Length,而且某些标头可能包含多个Content-Length。

答案 1 :(得分:0)

标题以" \ r \ n"结尾并不孤单" \ n"。请阅读RFC for HTTP。

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

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

修改 是的,可以有很多" \ r \ n"在体内,但你不必解析所有,你只需要迭代用" \ r \ n"分隔的标题行,并得到以"开头的行; -Length",这就是你要找的东西。此外,HTTP消息正文将在" \ r \ n \ r \ n \ n"之后启动。