python - 使用 Python 为 ETrade API 生成 oauth_signature

标签 python oauth etrade-api

E*Trade API 允许您使用 RESTful 登录网站并操作帐户或检索报价信息。尽管我无法生成与位于底部的“实践问题”相匹配的 oauth_signature https://us.etrade.com/ctnt/dev-portal/getContent?contentId=306a9d46-58c2-4cac-85f6-7717aea056bd

简单的 HMAC-SMA1 算法已在下面进行编码,并从此处重现 oauth core 1.0a 签名值 https://oauth.net/core/1.0a/#sig_base_example 。虽然我无法复制 E*Trade 签名值。

def generate_oauth_signature():
    from urllib.parse import quote_plus
    from hashlib import sha1
    import binascii
    import hmac

    key = quote_plus('7d30246211192cda43ede3abd9b393b9') + \
          '&' + \
          quote_plus('XCF9RzyQr4UEPloA+WlC06BnTfYC1P0Fwr3GUw/B0Es=')
    key = key.encode()
    raw = quote_plus('GET') + '&' + \
          quote_plus('https://etws.etrade.com/accounts/rest/accountlist') + '&' + \
          quote_plus('oauth_consumer_key=c5bb4dcb7bd6826c7c4340df3f791188&oauth_nonce=0bba225a40d1bbac2430aa0c6163ce44&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1344885636&oauth_token=VbiNYl63EejjlKdQM6FeENzcnrLACrZ2JYD6NQROfVI=')
    raw = raw.encode()
    hashed = hmac.new(key, raw, sha1)
    sig = hashed.digest()
    oauth_signature = quote_plus(binascii.b2a_base64(hashed.digest())[:-1])

该函数应该产生“%2FXiv96DzZabnUG2bzPZIH2RARHM%3D”,但我还没有。有人研究过 E*Trade API 的哈希吗?

我知道 etradepy.py,这是一个不错的软件包,但有点过时并且与当前的 E*Trade 网站不匹配。

最佳答案

一个问题是 oauth_token 需要在参数字符串中进行编码(最终会被双重编码)。我的如下:

oauth_consumer_key=c5bb4dcb7bd6826c7c4340df3f791188&oauth_nonce=0bba225a40d1bbac2430aa0c6163ce44&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1344885636&oauth_token=VbiNYl63EejjlKdQM6FeENzcnrLACrZ2JYD6NQROfVI%3D

关于python - 使用 Python 为 ETrade API 生成 oauth_signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177336/

相关文章:

twitter - 使用 Twitter 获取不记名 token

python - 用于期权链函数的 Pyetrade/Etrade API 只返回苹果的期权?

c# - 推特,Oauth,关注用户

php - 连接到 etws.etrade.com 的未知 SSL 协议(protocol)错误 :443

c# - 如何使用 OAuth 连接到 Etrade API?

pythonVSCode、venv 和 pylint

python - JupyterLab - 如何找出我的 session 正在哪个 python venv 上运行?

python - 理解Python中multitaper方法的频率轴

python - 通过动态创建嵌套字典来计算聚合

ios - Sdk 用于获取在 facebook/twitter/linked 上发布的授权 token ,然后使用 nodejs 发布