Python urllib2 响应头

26 投票
6 回答
59806 浏览
提问于 2025-04-15 15:32

我正在尝试提取一个网址请求的响应头。当我使用firebug来分析这个网址请求的响应输出时,它返回了:

Content-Type text/html

但是当我使用以下的python代码:

urllib2.urlopen(URL).info()

得到的输出是:

Content-Type: video/x-flv

我对python和网页编程都很陌生,任何有用的建议都非常感谢。如果需要更多信息,请告诉我。

提前感谢你阅读这篇帖子

6 个回答

2

这个奇怪的差异可能是因为两个请求发送了不同的头信息(可能是那种接受类型的头信息)——你能检查一下吗...? 另外,如果你在使用Firefox(我假设你在用这个浏览器运行firebug?)时,JavaScript正在运行——因为在Python的情况下,它肯定没有运行——那么“结果就不一定了”,就像人们常说的那样;-).

5

内容类型是 text/html

真的就这样,没有冒号吗?

如果是这样的话,那就能解释了:这是一个无效的头信息,所以它会被忽略。这样 urllib 就会自己猜测内容类型,通常是通过查看文件名来判断。如果网址的结尾恰好是 '.flv',它就会猜测这个类型应该是 video/x-flv

40

试着像Firefox那样发送请求。你可以在Firebug中查看请求头,所以把它们添加到你的请求对象里:

import urllib2

request = urllib2.Request('http://your.tld/...')
request.add_header('User-Agent', 'some fake agent string')
request.add_header('Referer', 'fake referrer')
...
response = urllib2.urlopen(request)
# check content type:
print response.info().getheader('Content-Type')

还有一个叫HTTPCookieProcessor的东西,可以让这个过程更好,但我觉得在大多数情况下你不需要它。可以看看Python的文档:

http://docs.python.org/library/urllib2.html

撰写回答