我如何克服 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 客户端功能,例如 curl
或 wget
(流行的 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 等)。
我试图通过以下代码从 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 followingHTTPResponse
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 客户端功能,例如 curl
或 wget
(流行的 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 等)。