El módulo de “solicitudes” de Python realiza solicitudes HTTP a servicios web o API. Proporciona una forma sencilla y cómoda de enviar solicitudes HTTP y gestionar respuestas, lo que facilita la interacción con los servicios web que utilizar la biblioteca urllib integrada.
El módulo de solicitudes le permite enviar solicitudes HTTP/1.1 con excepcional facilidad. No es necesario agregar manualmente cadenas de consulta a sus URL ni codificar sus datos PUT y POST, pero hoy en día, ¡solo use el método json!
Descargue e instale el módulo de solicitudes
Para comenzar con la biblioteca de solicitudes, primero debe instalarla, ya que no está incluida en la biblioteca estándar de Python:
python -m pip install requests
Sintaxis
requests.methodname(params)
Creando una solicitud
# Importing the requests module
import requests
# Defining the URL for the request
url = 'https://api.example.com/data'
# Sending a GET request to the specified URL
response = requests.get(url)
# Checking if the request was successful (HTTP status code 200)
if response.status_code == 200:
# Printing the response content as text
print(response.text)
else:
print(f'Request failed with status code {response.status_code}')
Además, para OBTENER solicitudes, el módulo de solicitudes admite otros métodos HTTP como POST, PUT, DELETE y más:
# Sending a POST request with JSON data
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, json=data, headers=headers)
Métodos de solicitud
El módulo de solicitudes proporciona muchas otras funciones, como manejar tiempos de espera, administrar cookies, manejar redirecciones y más.
Method | Description |
---|---|
delete(url, args) | Envía una solicitud DELETE a la URL especificada |
get(url, params, args) | Envía una solicitud GET a la URL especificada |
head(url, args) | Envía una solicitud HEAD a la URL especificada |
patch(url, data, args) | Envía una solicitud PATCH a la URL especificada |
post(url, data, json, args) | Envía una solicitud POST a la URL especificada |
put(url, data, args) | Envía una solicitud PUT a la URL especificada |
request(method, url, args) | Envía una solicitud del método especificado a la URL especificada |
Objeto de respuesta
Estos son los principales atributos y métodos del objeto Respuesta:
- .text: el contenido de la respuesta se decodifica como una cadena utilizando la codificación de caracteres especificada por los encabezados de la respuesta (o UTF-8 si no se especifica Ninguno).
- .content: el contenido de la respuesta sin procesar en bytes.
- .status_code: el código de estado HTTP devuelto por el servidor.
- .headers: un objeto similar a un diccionario que contiene los encabezados de respuesta.
- .cookies: un objeto
RequestsCookieJar
que representa las cookies establecidas o devueltas en la respuesta. - .url: La URL de la respuesta.
- .encoding: la codificación de caracteres utilizada para decodificar el contenido de la respuesta para producir el atributo
.text
. Se puede configurar manualmente para cambiar la codificación. - .reason: la frase de motivo HTTP devuelta por el servidor (por ejemplo, “OK” para un código de estado 200).
- .elapsed: objeto
timedelta
que representa el tiempo necesario para completar la solicitud.
Autenticación mediante solicitudes de Python
La autenticación es un aspecto crucial de muchos servicios web. La biblioteca de solicitudes en Python proporciona mecanismos integrados para manejar varios tipos de autenticación.
Autenticación básica
Basic Authentication requires a username and password. It sends the credentials as a Base64-encoded string in the request headers.
import requests
from requests.auth import HTTPBasicAuth
response = requests.get('https://api.example.com/data',
auth=HTTPBasicAuth('username', 'password'))
# Alternatively, you can use shorthand:
response = requests.get('https://api.example.com/data', auth=('username', 'password'))
Autenticación implícita
La autenticación implícita es un mecanismo de desafío-respuesta que es más seguro que la autenticación básica.
from requests.auth import HTTPDigestAuth
response = requests.get('https://api.example.com/data',
auth=HTTPDigestAuth('username', 'password'))
Autenticación de token de portador (por ejemplo, OAuth2.0)
Para API que requieren autenticación basada en tokens, como OAuth2.0:
import requests
headers = {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
response = requests.get('https://api.example.com/data', headers=headers)
Verificación de certificación SSL
En el contexto de la biblioteca de solicitudes en Python, la verificación del certificado SSL está habilitada de forma predeterminada para todas las solicitudes HTTPS. Esta es una característica de seguridad para evitar posibles ataques de intermediarios.
Comportamiento en solicitudes:
Comportamiento por defecto
De forma predeterminada, las solicitudes verificarán el certificado SSL del servidor.
La solicitud generalmente procede si el certificado es válido y está emitido por una autoridad certificadora (CA) confiable. Si el certificado no es válido, está autofirmado, ha caducado o ha sido emitido por una CA que no es de confianza, las solicitudes generarán un SSLError.
Deshabilitar la verificación
Para el desarrollo o al conectarse a un servidor con un certificado autofirmado, es posible que desee deshabilitar la verificación del certificado. Sin embargo, esto no se recomienda para uso en producción.
response = requests.get('https://example.com', verify=False)
Para suprimir esta advertencia (aunque no se recomienda), puede hacer lo siguiente:
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Objetos de sesión
En la biblioteca de solicitudes, un objeto de sesión permite conservar parámetros específicos en todas las solicitudes.
Esto puede resultar especialmente útil cuando realizas varias solicitudes al mismo servidor y desea reutilizar atributos específicos como encabezados, cookies, servidores proxy o detalles de autenticación.
El uso de una sesión también puede mejorar el rendimiento, ya que puede reutilizar la conexión TCP subyacente para múltiples solicitudes al mismo host en lugar de crear una nueva conexión para cada solicitud.
En resumen, si realiza varias solicitudes al mismo servidor o requiere que atributos específicos persistan en todas las solicitudes, el uso de un objeto Session puede simplificar su código y mejorar el rendimiento.
import requests
s = requests.Session()
s.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
op = s.get('https://httpbin.org/cookies')
print(op.text)