-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

如果没有完整的、其他工作的示例(我什至无法解析 host ),很难说出问题所在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 粘贴到浏览器地址栏wgetcurl命令行中会发生什么情况?)是否urlopen返回您期望的对象类型?身体看起来对吗?等等。

理想情况下,这将为您解决问题。如果没有,至少你会有一个更具体的问题要问,并且更有可能得到有用的答案。

于 2013-01-25T23:55:51.700 回答