【发布时间】:2021-01-17 14:01:17
【问题描述】:
您好 Stack Overflow 社区,在此先感谢您的帮助:
社区问题: 除了重新发明 oauth 轮子之外,是否有任何提示/最佳实践可以在我的 python GET 请求中创建我自己的 oauth 签名/随机数以获取 Netsuite 的新 API(REST Web 服务;有关问题的上下文,请参见下文)?似乎其他在这方面取得成功的人都是通过反复试验来完成的,这也是我的计划,但理想情况下,我希望错误更少,并且再次,而不是重新发明轮子。非常欢迎任何提示、技巧和想法。请参阅下面的上下文
什么: 尝试使用 Netsuite 全新的 REST API(REST Web 服务)发出 GET 请求。这是与他们的 SOAP/RESTlet 不同的 API。
如何: 通过在 Visual Studio Code 中编写 Python 脚本。我成功地在 Postman 中提出请求。我将代码复制到 Postman 用来成功发出 GET 请求并收到 401 响应的 Visual Studio Code 中(见下文)。
遇到的问题: 我收到 401 响应,无效登录。没有关于如何在 Postman 之外与这个新的 REST API 成功交互的官方 Netsuite 文档,所以在阅读了 StackOverflow 和其他博客/出版物之后,我似乎需要创建自己的 oauth_signature、oauth_timestamp 和 oauth_nonce。
邮递员 GET 请求代码:
import requests
url = "https://123456-sb1.suitetalk.api.netsuite.com/services/rest/query/v1/workbook/custworkbook12345/result"
payload = {}
headers = {
'Authorization': 'OAuth realm="123456_SB1",oauth_consumer_key="123456789101112131415",oauth_token="123456789101112131415",oauth_signature_method="HMAC-SHA256",oauth_timestamp="123456789",oauth_nonce="123456789",oauth_version="1.0",oauth_signature="123456789101112131415"',
'Cookie': 'NS_ROUTING_VERSION=LAGGING'
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
提前致谢!
【问题讨论】:
-
是否有可以使用的 python oauth 库?我会从那里开始,而不是自己构建标题。这个 oauth 标头值有一些复杂性。 oauthlib.readthedocs.io/en/latest/oauth1/client.html 之类的东西?
-
谢谢 Josh,我会看看 oauthlib 并熟悉它的工作原理/试一试。貌似支持HMAC-SHA256,用HMAC-SHA256和HMAC-SHA1签名有什么要注意的吗?
-
我只是查看了我的代码,我使用的是 HMAC-SHA256。并且 oauth1 有一些非常时髦的东西,比如你必须将
signature_method指定为“HMAC-SHA256”,然后还使用 python 散列库调用并实际使用 256 执行 hmac。希望你最终使用的任何 python 库都能做到这一点一切都为你秘密,它会变得混乱。 -
一个有趣的提示,以防它帮助你:必须及时生成随机数才能请求调用。如果您执行类似生成它的操作,然后等待 5 分钟,您将获得 401,因为随机数在 30-60 秒后“过期”。
-
而 netsuite 刚刚发布了一些关于领域是可选的更新,我还没有费心去研究它,但仅供参考,领域现在实际上可能是可选的,而且,netsuite 文档可能会非常有趣日期或错误照常。
标签: python api rest postman netsuite