邮递员之外的Netsuite REST Web服务API GET请求

时间:2020-10-01 19:49:26

标签: python api rest postman netsuite

嗨,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'))


谢谢!

1 个答案:

答案 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'))

一些其他有用的说明-

  • 我正在Netsuite沙箱中对此进行测试,因此是领域“ 12345_SB1”。如果 您不在沙盒中,不需要底线SB。只需使用您的帐户ID。
  • 我正在提取Netsuite Analytics报告,该报告目前仍在 新API(REST Web服务)的beta版。
  • 我使用了Josh推荐的Python oauthlib,我也建议您这样做,link here