【问题标题】:Python 3, http.client HTTP error 400Python 3,http.client HTTP 错误 400
【发布时间】:2012-11-19 07:59:11
【问题描述】:

我一直在从事一个小型宠物项目,我正在使用 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 中的尝试就被破坏了,并且 None 被返回。 我设法从请求中获得的数据是:

<!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) 上中断,因为 data 不是预期的,但我不太确定为什么会收到此错误。我去了网站并输入了“Bad Kids Go To Hell”,一切正常。

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

【问题讨论】:

    标签: http python-3.x imdb


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我不知道这件事,以后会记住的。我已按照您的建议修改了我的代码,但它产生了一个不同的错误:

      404 - 找不到文件或目录。

      您要查找的资源可能已被删除,有名称已更改,或暂时不可用。

      已编辑:抱歉,我在回复时查看了错误的测试。我的所有查找都给出了这个错误。下次有机会时,我将尝试调试它并找到解决方案。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多