The trouble here is the special characters in the query parameter. They need to be properly encoded. Here is a discussion on how to encode space characters: URL encoding the space character: + or %20? The /
characters need to be encoded as %2F
sequences and "
as %22
.
I have done a little experiment with the requests
library and it seems that it expects url
arguments to be properly encoded already:
>>> 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
As you can see, for some reason, it encodes the space character as a %20
sequence, whilst you need it to be encoded as a +
character, and the /
character is not encoded at all.
In order to fix that you would have to provide it the following 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
There are some libraries available that can properly encode the URL for you, but as you have already found out, requests
can do that as well (and Postman too). All you need is to pass the query parameters as a params
argument.
But there is a little mistake in your code snippet. You pass a query parameter with a key createdDate
and a value 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
Notice the missing q=
there. You probably need to pass a query parameter with a key q
and a value 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