python requests encode url parameters

How to Encode URL Parameters in Python Requests?

If you're working with an API in Python, you may need to pass parameters in the URL. However, these parameters may contain special characters, such as spaces or ampersands, which can cause issues. That's where URL encoding comes in.

Using the params Parameter

The easiest way to encode URL parameters in Python Requests is by using the params parameter. This parameter takes a dictionary of keys and values, which are automatically encoded and added to the URL. Here's an example:


import requests

url = "https://example.com/api"
params = {
    "search_query": "hello world",
    "sort_by": "date",
    "page": 1
}

response = requests.get(url, params=params)
    

In this example, we're sending a GET request to https://example.com/api with three parameters: search_query, sort_by, and page. The values of these parameters are automatically URL-encoded by Requests.

Manually Encoding Parameters

If you need more control over how your parameters are encoded, you can manually encode them using the urlencode function from the urllib.parse module. Here's an example:


from urllib.parse import urlencode
import requests

url = "https://example.com/api?"
params = {
    "search_query": "hello world",
    "sort_by": "date",
    "page": 1
}

encoded_params = urlencode(params)

response = requests.get(url + encoded_params)
    

In this example, we're manually encoding the parameters using the urlencode function and then appending them to the URL using string concatenation.

By default, urlencode uses the utf-8 encoding. However, you can specify a different encoding by passing the encoding parameter, like this:


encoded_params = urlencode(params, encoding='ISO-8859-1')