Netsuite REST Web 服务 API GET 请求,Postman 之外
Netsuite REST Web Services API GET Request, Outside of Postman
您好 Stack Overflow 社区,在此先感谢您的帮助:
社区问题:
除了重新发明 oauth 轮子之外,是否有任何提示/最佳实践可以在我的 python GET 请求中创建我自己的 oauth signature/nonce Netsuite 的新 API(REST Web 服务;请参阅下文了解上下文的问题)?似乎其他在这方面取得成功的人都是通过反复试验来完成的,这也是我的计划,但理想情况下,我希望错误更少,而不是重新发明轮子。非常欢迎任何提示、技巧和想法。请参阅下面的上下文
内容:
尝试使用 Netsuite 的全新 REST API(REST Web 服务)发出 GET 请求。这与他们的 SOAP/RESTlet 不同 API。
如何:
通过在 Visual Studio 代码中编写 Python 脚本。我成功地在 Postman 中提出了请求。我将代码复制到 Visual Studio Postman 用来发出成功的 GET 请求并收到 401 响应的代码(见下文)。
遇到的问题:
我收到 401 响应,登录无效。没有关于如何在 Postman 之外与这个新的 REST API 成功交互的官方 Netsuite 文档,所以在阅读 Whosebug 和其他 blogs/publications 之后,我似乎需要创建自己的 oauth_signature、oauth_timestamp和oauth_nonce。
Postman 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'))
提前致谢!
感谢 Josh 的推荐(请参阅对我的原始问题的评论),我成功地使用 oauthlib 的 oauth1 客户端在 Visual Studio 代码中发送请求。 nonce 和签名看起来与 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 Sandbox 中对此进行测试,因此领域为“12345_SB1”。如果
你不在沙盒中,你不应该需要下划线 SB。只需使用您的帐户 ID。
- 我正在提取 Netsuite 分析报告,此时它还在
新 API(REST Web 服务)的测试版。
- 我使用了 Josh 推荐的 Python oauthlib,我建议你也这样做,link here
您好 Stack Overflow 社区,在此先感谢您的帮助:
社区问题: 除了重新发明 oauth 轮子之外,是否有任何提示/最佳实践可以在我的 python GET 请求中创建我自己的 oauth signature/nonce Netsuite 的新 API(REST Web 服务;请参阅下文了解上下文的问题)?似乎其他在这方面取得成功的人都是通过反复试验来完成的,这也是我的计划,但理想情况下,我希望错误更少,而不是重新发明轮子。非常欢迎任何提示、技巧和想法。请参阅下面的上下文
内容: 尝试使用 Netsuite 的全新 REST API(REST Web 服务)发出 GET 请求。这与他们的 SOAP/RESTlet 不同 API。
如何: 通过在 Visual Studio 代码中编写 Python 脚本。我成功地在 Postman 中提出了请求。我将代码复制到 Visual Studio Postman 用来发出成功的 GET 请求并收到 401 响应的代码(见下文)。
遇到的问题: 我收到 401 响应,登录无效。没有关于如何在 Postman 之外与这个新的 REST API 成功交互的官方 Netsuite 文档,所以在阅读 Whosebug 和其他 blogs/publications 之后,我似乎需要创建自己的 oauth_signature、oauth_timestamp和oauth_nonce。
Postman 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'))
提前致谢!
感谢 Josh 的推荐(请参阅对我的原始问题的评论),我成功地使用 oauthlib 的 oauth1 客户端在 Visual Studio 代码中发送请求。 nonce 和签名看起来与 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 Sandbox 中对此进行测试,因此领域为“12345_SB1”。如果 你不在沙盒中,你不应该需要下划线 SB。只需使用您的帐户 ID。
- 我正在提取 Netsuite 分析报告,此时它还在 新 API(REST Web 服务)的测试版。
- 我使用了 Josh 推荐的 Python oauthlib,我建议你也这样做,link here