urllib& python3:HTTP错误405:方法不允许

时间:2015-12-13 19:52:08

标签: json api python-3.x urllib

我正在尝试使用Python3和urllib对应该返回帐户余额的API进行简单的身份验证。

我的代码如下:

import urllib
import urllib.request
import json

id = "nkkhuz6" # fake
secret = "s9MeR0J9yxtndLBPVA" # fake
auth_str = id + ":" + secret

def getBalances():

    values = {'u' : auth_str}
    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes

    request = urllib.request.Request(url = "https://api.com", data = data)

    with urllib.request.urlopen(request) as f:
        print(json.loads(f.read().decode('utf-8')))

但是当我运行getBalances()时,我收到以下错误:

Adriaans-MacBook-Pro:Documents adriaanjoubert$ python3 main.py
Traceback (most recent call last):
  File "main.py", line 96, in <module>
    getBalances()
  File "main.py", line 19, in getBalances
    with urllib.request.urlopen(request) as f:
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 161, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 469, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 579, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 507, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 441, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 587, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 405: Method Not Allowed

我确定网址是正确的,如果我追加一个尾随/,我会收到错误urllib.error.HTTPError: HTTP Error 404: Not Found

当我运行以下代码时,我会获得帐户余额:

cmd = """curl -u """ + auth_str + """ https://api.com/"""
os.system(cmd)

我做错了什么?我想使用urllib,以便我可以将API中的内容存储在变量中。

0 个答案:

没有答案