嗨,Stack Overflow社区,在此先感谢您的帮助:
社区问题: 除了重新发明oauth轮外,在Netsuite的新API(REST Web服务;有关问题的上下文,请参见下文)的python GET请求中,是否有任何技巧/最佳实践来创建自己的oauth签名/即时信息?看来其他在此方面成功的人也通过反复试验来做到这一点,这也是我的计划,但理想情况下,我希望减少错误,并且再也不要重蹈覆辙。任何技巧,窍门,想法都将受到欢迎。参见下面的上下文
内容: 尝试使用Netsuite的全新REST API(REST Web服务)发出GET请求。这是与他们的SOAP / RESTlet不同的API。
方法: 通过在Visual Studio Code中编写Python脚本。我成功地在邮递员中提出了要求。我将代码复制到Postman用来成功执行GET请求的Visual Studio Code中,并收到401响应(见下文)。
遇到的问题: 我收到401响应,登录无效。没有正式的Netsuite文档说明如何与Postman之外的新REST API进行成功交互,因此在通读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'))
谢谢!
答案 0 :(得分:0)
由于Josh的推荐(请参阅我的原始问题的注释),我成功地使用了oauthlib的oauth1客户端在Visual Studio Code中发送了一个请求。随机数和签名看起来与Postman在其代码片段中显示的内容有些不同,但是确实有效。对于尝试使用Netsuite的REST Web服务进行相同操作的任何人,我建议您采用这种方法。
我的代码发送了成功的GET请求:
import requests
import oauthlib.oauth1
import json
url = "https://12345-sb1.suitetalk.api.netsuite.com/services/rest/query/v1/dataset/custdataset1/result"
payload = {}
client = oauthlib.oauth1.Client('consumer key', client_secret='12345',
resource_owner_key='12345', resource_owner_secret='12345', realm='12345_SB1',signature_method="HMAC-SHA256")
url, headers, body = client.sign('https://4635201-sb4.suitetalk.api.netsuite.com/services/rest/query/v1/dataset/custdataset1/result')
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
一些其他有用的说明-