【发布时间】:2015-08-19 15:54:28
【问题描述】:
曾经在 kali 1 上: linux2 上的 Python 2.7.3(默认,2014 年 3 月 13 日,11:03:55)[GCC 4.7.2]。 请求模块的版本是 0.12.1
现在在 kali 2 上: linux2 上的 Python 2.7.9(默认,2015 年 3 月 1 日,12:57:24)[GCC 4.9.2]。 请求模块的版本是 2.7.0
cryptsy 有简单的 api_query:
import hashlib
import hmac
import requests
import time
import urllib
def api_query( method, req = {}):
# API settings
key = API_KEY # your API-key
secret = API_SECRET # your Secret-key
req['method'] = method
req['nonce'] = int( time.time() )
# generate the POST data string
post_data = urllib.urlencode( req )
sign = hmac.new( secret, post_data, hashlib.sha512)
# generate the extra headers
headers = { 'Sign': sign.hexdigest(), 'Key': key }
url = 'https://api.cryptsy.com/api'
print 'post_data = ' + post_data
print 'headers = ' + str( headers )
r = requests.post( url, data=post_data, headers = headers )
print r
for i in r.__dict__:
print ''
print i, r.__dict__[i]
return r.text
它适用于 kali 1,但 kali 2 - 不是。
>>> print api_query("getinfo")
{"success":"0","error":"Unable to Authorize Request - Check Your Post Data"}
我第一次在 qemu 中启动 kali 1 并开始比较两个相似的代码。我必须将nonce 设置为一个数字并测试两个post_datas 之间的差异。一切都是平等的。甚至Sign(kali1) == Sign(kali2)。
我将地址从 api.cryptsy.com 更改为 127.0.0.1。我可以看到:
0.12.1 将
Data作为一个编码字符串发送。 - 很好。2.7.0 将字符串转换回
HTML Form URL Encoded。
【问题讨论】:
-
你检查过请求变更日志吗?
-
post_data = urllib.urlencode( req )对我来说看起来很可疑。我认为您不需要在新版本中对帖子数据进行编码。 -
@yaroslav-admin 你是对的。谢谢你。解决了。
标签: python authentication post python-requests