http - Python 3,http.client HTTP 错误 400

标签 http python-3.x imdb

我一直在开发一个小型宠物项目,我使用 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(data),因为数据不是预期的,但我不太确定为什么会收到此错误。我访问该网站并输入“Bad Kids Go To Hell”,一切正常。

如果您需要更多帮助,请告诉我, 谢谢。

最佳答案

要创建网址的参数列表,您应该使用[urlencode()][1]。在这种情况下,字符串中的空格可能会导致问题,应将它们转换为“+”字符。

__connection.request("GET", "/"+(urlencode({'t': title})

关于http - Python 3,http.client HTTP 错误 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656381/

相关文章:

java - 为什么这个简单的 SOAP 客户端不工作 (org.apache.http)?

c - C 中的 http 媒体流入门

python - 哪个是更新所有 anaconda python 包的正确命令?

movie - Imdb 上所有电影名称、 Actor 、导演、编剧的列表

spring - 用tomcat和spring模拟http 503状态

php - 如何在 PHP 中发出异步 GET 请求?

python - 在不安装 Python 的情况下,在 Cloudera 虚拟机上安全地拥有两个版本的 Python

python - 如何将行添加到缺少日期(天)的表中,并使用从下面的行复制的值填充添加的行?

python - 为什么我在使用 IMDbPY 时会收到这么多警告和一些错误?

php - OMDb API 多个结果