我一直致力于一个小型宠物项目,我正在使用http.client与omdbapi进行沟通(对不起,如果这是一个不好的术语,请随时纠正我)。从这里我使用以下代码访问网站上的数据:
import http.client, json
__connection = http.client.HTTPConnection("www.omdbapi.com")
def getDetailsFromTitle(title):
__connection.request("GET", "/?t=" + title)
return __processRequest()
def getDetailsFromID(id):
__connection.request("GET", "/?i=" + id)
return __processRequest()
def __processRequest():
try:
response = __connection.getresponse()
data = response.read()
data = data.decode("utf-8")
return json.loads(data)
except: return None
这在我的前几次试验中运行良好,就像我能够将我的所有数据正确地恢复,如果我抬头说“Eureka”或“Superbad”;然而,一旦我输入“Bad Kids Go To Hell”,我在__processRequest中的尝试就被打破了,并且没有被返回。 我设法从请求中获得的数据是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>
它显然打破了json.loads(数据),因为数据不是预期的,但我不太确定为什么我收到这个错误。我去了网站并输入了“Bad Kids Go To Hell”,一切正常。
如果您需要更多帮助,请告诉我, 谢谢。
答案 0 :(得分:1)
要创建网址的参数列表,您应该使用[urlencode()][1]
。在这种情况下,它可能是字符串中导致问题的空格,它们应该转换为“+”字符。
__connection.request("GET", "/"+(urlencode({'t': title})