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
我有以下基础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