今天我实际上需要从http-header响应中检索数据。但是因为我以前从未这样做过,而且你在谷歌上找不到这个。我决定在这里问我的问题。
所以实际问题:如何在python中打印http-header响应数据?我正在使用请求模块在Python3.5中工作,但尚未找到一种方法。
答案 0 :(得分:7)
这样的事情怎么样:
import urllib2
req = urllib2.Request('http://www.google.com/')
res = urllib2.urlopen(req)
print res.info()
res.close();
如果您正在寻找标题中的特定内容:
For Date: print res.info().get('Date')
答案 1 :(得分:4)
更新:根据OP的评论,只需要响应标头。更简单,如下面的Requests模块文档中所述:
我们可以使用Python字典查看服务器的响应头:
>>> r.headers
{
'content-encoding': 'gzip',
'transfer-encoding': 'chunked',
'connection': 'close',
'server': 'nginx/1.0.4',
'x-runtime': '148ms',
'etag': '"e1ca502697e5c9317743dc078f67693f"',
'content-type': 'application/json'
}
特别是文档说明:
这本字典很特别:它只针对HTTP标头。根据RFC 7230,HTTP标头名称不区分大小写。
因此,我们可以使用我们想要的任何大写来访问标题:
继续解释有关RFC合规性的更多聪明之处。
使用Response.iter_content将处理很多在直接使用Response.raw时必须处理的内容。在下载流式传输时,以上是检索内容的首选和推荐方式。
它提供了例子:
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
但是也提供了如何在实践中通过重定向到文件等并使用不同的方法来提供建议:
使用Response.iter_content将处理很多在直接使用Response.raw时必须处理的内容
答案 2 :(得分:2)
以下是使用您提到的请求库(在Python3中实现)公正获得响应标头的方法:
import requests
url = "https://www.google.com"
response = requests.head(url)
print(response.headers) # prints the entire header as a dictionary
print(response.headers["Content-Length"]) # prints a specific section of the dictionary
使用.head()而不是.get()很重要,否则您将像提到的其余答案一样检索整个文件/页面。
如果您希望检索需要身份验证的URL,则可以用以下内容替换上面的response
:
response = requests.head(url, auth=requests.auth.HTTPBasicAuth(username, password))
答案 3 :(得分:1)
我使用urllib模块,使用以下代码:
from urllib import request
with request.urlopen(url, data) as f:
print(f.getcode()) # http response code
print(f.info()) # all header info
resp_body = f.read().decode('utf-8') # response body
答案 4 :(得分:1)
尝试使用req.headers
,这就是全部。您将获得响应标头;)
答案 5 :(得分:0)
import requests
site = "https://www.google.com"
headers = requests.get(site).headers
print(headers)
print(headers["domain"])
答案 6 :(得分:0)
很容易打字
print(response.headers)
或者我的最爱
print(requests.get('url').headers)
also u can use
print(requests.get('url').content)