2

私はhttp.clientを使用してomdbapiと通信する小さなペットプロジェクトに取り組んでいます(それが悪い用語である場合は申し訳ありませんが、遠慮なく訂正してください) 。ここから、次のコードを使用してWebサイトのデータにアクセスします。

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)で明らかに壊れていますが、なぜこのエラーが発生するのかよくわかりません。私はウェブサイトに行き、「Bad Kids Go To Hell」と入力しましたが、すべてうまくいきました。

他にご不明な点がございましたら、お気軽にお問い合わせください。ありがとうございます。

4

1 に答える 1

2

URLのパラメータリストを作成するには、を使用する必要があります[urlencode()][1]。この場合、問題の原因は文字列内のスペースである可能性が高いため、「+」文字に変換する必要があります。

__connection.request("GET", "/"+(urlencode({'t': title})
于 2012-12-01T07:16:10.787 に答える