我正在使用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服务没有按预期工作。
谢谢!
答案 0 :(得分: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'