我如何克服 Python http.client.HTTPResponse 个物体?

How do I overcome Python http.client.HTTPResponse objects?

我试图通过以下代码从 url 获得响应。 我正在使用 Python 3.x

from urllib.request import urlopen

url_getallfolders = 'https://qa.wittyparrot.com/alfresco/service/acrowit/userfolderinfo?access_token=TICKET_83361146b0e140f48ba404c3d8457452a92e117f'
x = urlopen(url_getallfolders)
print(x)

我收到以下错误:

<http.client.HTTPResponse object at 0x030304B0>

我什至尝试过 urllib.urlopen:

x = urllib.urlopen(url_getallfolders)
print(x)

然后我得到这个错误:

NameError: name 'urllib' is not defined

请帮忙。提前致谢

您没有收到错误,而是收到了预期的响应 object。如果您想从响应中访问数据,那么您需要从 object 中 读取 ,或者可能检查 headers 和状态代码。

读取响应body数据非常简单:

x = urlopen(url_getallfolders)
data = x.read()

来自urllib.request.urlopen() documentation:

For http and https urls, this function returns a http.client.HTTPResponse object which has the following HTTPResponse Objects methods.

我在上面使用 HTTPResponse.read() method 的地方。

请注意,结果将是 编码字节 ,如果您需要文本,您仍然需要对该文本进行解码。 URL 你叫 returns JSON,所以你可能想把它解码成 Python:

import json

x = urlopen(url_getallfolders)
raw_data = x.read()
encoding = x.info().get_content_charset('utf8')  # JSON default
data = json.loads(raw_data.decode(encoding))

之后您可以访问 'error''errorList''respList''warning'.

等键

如果您只想要超级基本的面向命令行的 HTTP 客户端功能,例如 curlwget(流行的 CLI 实用程序)而没有任何选项;你给它一个URL,它只是returns明文和HTML:

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

from urllib.request import urlopen

with urlopen('https://example.com') as x:
     data = x.read().decode('utf-8')

print(data)

如果您想要字节对象,只需删除 .decode('utf-8'),使其看起来像:

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

from urllib.request import urlopen

with urlopen('https://example.com') as x:
     data = x.read()

print(data)

我试图将它减少到尽可能少的行数。随意单独定义变量(URLs 等)。