Python netsuite请求参数

Python netsuite request parameters

我有以下基础URL

https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder

把所有的销售订单交给我,效果很好。 但是,当我添加以下查询参数时

?q=createdDate AFTER "01/01/2022"

它说无效 URL,未提供架构。 虽然在邮递员中工作正常。

我试过在 url 中使用该查询参数,就像这样;

https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder?q=createdDate AFTER "01/01/2022"

也尝试将其作为请求中的参数,但这给了我一个授权令牌错误。

headers = {token_info,private_keys}
params = {'createdDate': 'AFTER "01/01/2022"'}
payload = {}

requests.request(HTTP_METHOD, BASE_URL, params=params, headers=headers, data=payload)

想知道我还能尝试什么。

这里的麻烦是查询参数中的特殊字符。它们需要正确编码。下面是关于如何编码 space 个字符的讨论: URL encoding the space character: + or %20? / 个字符需要编码为 %2F 个序列, " 个字符需要编码为 %22 .

我用 requests 库做了一个小实验,它似乎期望 url 参数已经被正确编码:

>>> BASE_URL = 'http://localhost:8000?q=createdDate AFTER "01/01/2022"'
>>> params = None
>>> requests.request(HTTP_METHOD, BASE_URL, params=params, headers=headers, data=payload)
127.0.0.1 - - [22/Apr/2022 07:14:25] "GET /?q=createdDate%20AFTER%20%2201/01/2022%22 HTTP/1.1" 200 100

如您所见,出于某种原因,它将 space 字符编码为 %20 序列,而您需要将其编码为 + 字符,并且/ 字符根本没有编码。

为了解决这个问题,您必须提供以下内容 BASE_URL:

>>> BASE_URL = 'https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder?q=createdDate+AFTER+%2201%2F01%2F2022%22'
>>> requests.request(HTTP_METHOD, BASE_URL, params=params, headers=headers, data=payload)
127.0.0.1 - - [22/Apr/2022 07:40:52] "GET /?q=createdDate+AFTER+%2201%2F01%2F2022%22 HTTP/1.1" 200 100

有一些可用的库可以为您正确编码 URL,但正如您已经发现的那样,requests 也可以做到这一点(Postman 也可以)。您只需将查询参数作为 params 参数传递即可。

但是你的代码片段有一点错误。您传递一个带有键 createdDate 和值 AFTER "01/01/2022":

的查询参数
>>> BASE_URL = 'http://localhost:8000'
>>> params = {'createdDate': 'AFTER "01/01/2022"'}
>>> requests.request(HTTP_METHOD, BASE_URL, params=params, headers=headers, data=payload)
127.0.0.1 - - [22/Apr/2022 07:48:27] "GET /?createdDate=AFTER+%2201%2F01%2F2022%22 HTTP/1.1" 200 100

注意那里缺少的 q=。您可能需要传递一个带有键 q 和值 createdDate AFTER "01/01/2022":

的查询参数
>>> BASE_URL = 'https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder'
>>> params = {'q': 'createdDate AFTER "01/01/2022"'}
127.0.0.1 - - [22/Apr/2022 07:50:20] "GET /?q=createdDate+AFTER+%2201%2F01%2F2022%22 HTTP/1.1" 200 100