urllib3
is a powerful HTTP client for Python that provides many features for making HTTP requests. Basic authentication is a common task when interacting with web services that require a username and password to access. While urllib3
does not have a specific built-in function exclusively for basic authentication, it provides a way to do it using headers.
Basic authentication involves sending a request with an Authorization
header, which contains the word 'Basic' followed by a space and a base64-encoded string of the username and password formatted as username:password
.
Here's how to do basic authentication with urllib3
:
import urllib3
from base64 import b64encode
# Create a new PoolManager instance
http = urllib3.PoolManager()
# Encode the credentials
credentials = b64encode(b'username:password').decode('utf-8')
# Make the request including the basic auth header
response = http.request(
'GET',
'http://example.com/',
headers={
'Authorization': f'Basic {credentials}'
}
)
# Print the response
print(response.data.decode('utf-8'))
In this example, replace 'username:password'
with your actual username and password. The b64encode
function from the base64
module is used to encode the credentials to base64, and decode('utf-8')
converts the bytes object back to a string.
Note that sending credentials over an unencrypted connection (such as HTTP) is insecure. Always use HTTPS when performing basic authentication to ensure that your credentials are encrypted during transit.
If you're using urllib3
extensively, you might want to consider using the requests
library, which is built on top of urllib3
and provides a more user-friendly interface, including built-in support for basic authentication:
import requests
from requests.auth import HTTPBasicAuth
response = requests.get(
'http://example.com/',
auth=HTTPBasicAuth('username', 'password')
)
print(response.text)
In this requests
example, the HTTPBasicAuth
class is used to handle the basic authentication headers for you. This is a more straightforward approach and is recommended if you are looking for simplicity and readability in your code.