-1
import urllib, urllib2, json
def make_request(method, base, path, params):
    if method == 'GET':
        return json.loads(urllib2.urlopen(base+path+"?"+urllib.urlencode(params)).read())
    elif method == 'POST':
        return json.loads(urllib2.urlopen(base+path, urllib.urlencode(params)).read())
api_key = "5f1d5cb35cac44d3b"
print make_request("GET", "https://indit.ca/api/", "v1/version", {"api_key": api_key})

この一連のコードは、{status:'ok'、version:'1.1.0'}のようなバージョンとステータスを返す必要があります。

その応答を印刷するには、どのコードを追加する必要がありますか?

4

1 に答える 1

1

完全な、それ以外の場合は機能する例がなければ、問題が何であるかを判断するのは困難です(ホストを解決することさえできませんindit.ca) が、これを自分でデバッグする方法を説明できます。段階的に分解します。

import urllib, urllib2, json
def make_request(method, base, path, params):
    if method == 'GET':
        url = base+path+"?"+urllib.urlencode(params)
        print 'url={}'.format(url)
        req = urllib2.urlopen(url)
        print 'req={}'.format(req)
        body = req.read()
        print 'body={}'.format(body)
        obj = json.loads(body)
        print 'obj={}'.format(obj)
        return obj
    elif method == 'POST':
        # You could do the same here, but your test only uses "GET"
        return json.loads(urllib2.urlopen(base+path, urllib.urlencode(params)).read())

api_key = "5f1d5cb35cac44d3b"
print make_request("GET", "https://indit.ca/api/", "v1/version", {"api_key": api_key})

これで、どこが間違っているかがわかります。正しい URL を生成していますか? (その URL をブラウザーのアドレス バー、wgetまたはcurlコマンド ラインに貼り付けるとどうなりますか?)urlopen期待した種類のオブジェクトが返されますか? 体の形は整っていますか?等々。

理想的には、これで問題が解決します。そうでない場合は、少なくとも、より具体的な質問をする必要があり、有用な回答が得られる可能性が高くなります。

于 2013-01-25T23:55:51.700 に答える