0

我正在使用 Python 3 创建一个应用程序,该应用程序从以下 API 服务中检索一个随机词,

http://randomword.setgetgo.com/get.php

这是我到目前为止所做的,

import urllib.request
response = urllib.request.urlopen('http://randomword.setgetgo.com/get.php')

我试过了

word = response.read()
print (word)

但我得到的只是,

b'\xef\xbb\xbfcellepore\r\n'
b'\xef\xbb\xbfchough\r\n'
b'\xef\xbb\xbfparamide\r\n'
b'\xef\xbb\xbfunsiphon\r\n'
b'\xef\xbb\xbfadenopodous\r\n'
b'\xef\xbb\xbfsupertramp\r\n'
b'\xef\xbb\xbfEphraimite\r\n'
b'\xef\xbb\xbfosteostracan\r\n'
b'\xef\xbb\xbfrhizopodan\r\n'
b'\xef\xbb\xbftransiter\r\n'
b'\xef\xbb\xbfoneirocritically\r\n'

API 服务说它将返回 JSON,但这看起来不像 JSON。

我想知道我的代码是否有问题或 API 服务没有按预期工作。

谢谢!

4

1 回答 1

1

实际上,该服务没有返回 JSON。如您所见,它返回纯文本并将 Content-Type 标头设置为 text/html,而不管我们在 Accept 标头上发送什么内容:

>>> req = urllib2.Request('http://randomword.setgetgo.com/get.php', headers={"Accept": "application/json"})
>>> response = urllib2.urlopen(req)
>>> word = response.read()
>>> word
'\xef\xbb\xbfNinevitish\r\n'
>>> response.headers['Content-Type']
'text/html'

由于该服务的文档记录很差,因此很难说出发生了什么以及它实际期望什么。\xef\xbb\xbf前缀是一个 UTF-8 BOM,所以如果你仍然想这样使用它,你可以这样做:

>>> word.decode('utf-8-sig').strip()
u'Ninevitish'
于 2013-11-03T22:31:53.703 回答