【发布时间】:2018-01-31 15:19:49
【问题描述】:
我正在尝试在 python3.6.2 中使用需要 HTTP(网络是 https)中的 Post 字段的 web api。 我试过 urllib.request.urlopen 但响应是
urllib.error.HTTPError:HTTP 错误 403:禁止
这是我使用的代码:
from urllib.parse import urlencode
from urllib.request import Request, urlopen
from hashlib import sha256
import time
key = 'xxxxxxxxxx'
secret_key = 'yyyyyyyyyyyy'
nonce = int(time.time())
signature = sha256((key + str(nonce) + secret_key).encode()).hexdigest()
url = "https://xxxxx/api/"
post_fields = {'key': key, 'nonce': nonce,
'signature': signature}
request = Request(url, data=urlencode(post_fields).encode())
response = urlopen(request).read().decode()
但是我已经用这个代码尝试了requests library:
import requests
from hashlib import sha256
import time
key = 'xxxxxxxxxx'
secret_key = 'yyyyyyyyyyyy'
nonce = int(time.time())
signature = sha256((key + str(nonce) + secret_key).encode()).hexdigest()
url = "https://xxxxx/api/"
post_fields = {'key': key, 'nonce': nonce,
'signature': signature}
response = requests.post(url, post_fields)
它有效。 我真的很想知道不同之处,因为 urllib.request 可以在指定 data 参数时发送 post 请求。
【问题讨论】:
标签: python