2

如何使用 httplib/http.client 获取传入响应的编码?

我可以使用 getheaders() 将其视为 Content-Type 的一部分,但我认为解析它是一种不好的做法,因为它可能采用几种不同的格式,并且您应该在 httplib/http.client 中使用特定方法反而:

>>> r = h.getresponse()
>>> r.getheaders()
[('transfer-encoding', 'chunked'), ('expires', 'Tue, 11 Oct 1988 22:00:00 GMT'), ('vary', 'Accept-Encoding'), ('server', 'nginx/1.2.6'), ('connection', 'keep-alive'), ('pragma', 'no-cache'), ('cache-control', 'no-cache, must-revalidate'), ('date', 'Thu, 18 Apr 2013 00:46:18 GMT'), ('content-type', 'text/html; charset=utf-8')]

获取传入编码的最佳方法是什么?

4

1 回答 1

0

不是直接的答案,但也许你会发现这很有用。使用请求库。

人们停止构建自己的 http 库是有原因的。事实上,httplib 甚至说 use urllibwhich uses httplibrary。反过来,请求使用 urllib3。

>>> import requests
>>> r = requests.get("http://bitbucket.org")
dir>>> dir(r)
['__bool__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'encoding', 'headers', 'history', 'iter_content', 'iter_lines', 'json', 'links', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']
>>> r.encoding
'utf-8'
于 2013-04-18T01:56:56.440 回答