簡體   English   中英

郵遞員之外的 Netsuite REST Web 服務 API GET 請求

[英]Netsuite REST Web Services API GET Request, Outside of Postman

嗨堆棧溢出社區,提前感謝您的幫助:

社區問題:不是重新發明 oauth 輪,是否有任何提示/最佳實踐可以在我的 Python GET 請求 Netsuite 的新 API(REST Web 服務;有關問題的上下文)中創建我自己的 oauth 簽名/隨機數? 似乎其他在這方面取得成功的人已經通過反復試驗完成了這也是我的計划,但理想情況下,我希望錯誤更少,而不是重新發明輪子。 任何提示、技巧、想法都非常受歡迎。 請參閱下面的上下文

內容:嘗試使用 Netsuite 全新的 REST API(REST Web 服務)發出 GET 請求。 這是一個不同於他們的 SOAP/RESTlets 的 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'))


提前致謝!

感謝 Josh 的推薦(請參閱對我的原始問題的評論)我成功地使用 oauthlib 的 oauth1 客戶端在 Visual Studio Code 中發送請求。 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,我建議你也這樣做,鏈接在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM