Header Ads Widget

Ticker

6/recent/ticker-posts

Biblioteca de solicitudes de Python

 

El tutorial anterior cubría algunas formas de acceder a los servicios web en Python usando el módulo urllib que es parte de la biblioteca estándar de Python. En este tutorial, echaremos un vistazo a la biblioteca Python Requests, que es una alternativa más poderosa y fácil de usar que urllib. Python Requests simplifica y mejora los módulos urllib integrados. Python Requests es una biblioteca con todas las funciones con más funciones de las que podemos cubrir aquí, pero veremos las más importantes para conocer. A diferencia de urllib, Requests no viene empaquetado con una distribución estándar de Python. Dado que estamos familiarizados con los entornos virtuales PIP y Python, será bastante fácil obtener solicitudes instalado para que podamos probar sus características. La API para solicitudes es fácil de usar y brinda la capacidad de trabajar con todas las operaciones HTTP disponibles. Cada operación HTTP en realidad se asigna al mismo nombre de método para la API de solicitudes. Con Requests, puede manejar el envío de parámetros de datos, encabezados e intentará decodificar automáticamente las respuestas web por usted. Esto funciona especialmente bien si los datos devueltos están en formato JSON.


Solicitudes de instalación

Para instalar la biblioteca de solicitudes en nuestro entorno virtual de Python, podemos escribir solicitudes de instalación de pip .

instalar solicitudes de Python en entorno virtual
Cuando escriba las solicitudes de instalación de pip , verá que el administrador de paquetes de pip sigue adelante y descarga las solicitudes y las dependencias de soporte que puedan ser necesarias. Al escribir pip freeze después de que se completen las descargas, podemos ver que, además de las solicitudes, se instalan los paquetes certifi, chardet, idna y urllib3.


Hacer una solicitud simple

Una solicitud GET es el tipo de solicitud más simple que puede realizar con la biblioteca. Para hacerlo, usa el getmétodo de la biblioteca y pasa la URL de la que desea obtener datos. La siguiente sintaxis representa una solicitud GET simple, y la tabla contiene algunos de los parámetros comunes que puede usar con cada solicitud.

respuesta = solicitudes.get (url)

paramsPares clave-valor que se enviarán en la cadena de consulta
encabezadosDiccionario de valores de encabezado para enviar junto con la solicitud
authTupla de autenticación para habilitar diferentes formas de autenticación
se acabó el tiempoValor en segundos para esperar a que el servidor responda

Solicitudes de prueba

En nuestro entorno de pruebas de Pycharm podemos agregar un nuevo archivo para probar algún código de la biblioteca de solicitudes.

solicitudes de pycharm python

Hacer una solicitud GET

request_tutorial.py

Código de respuesta: + ----- 200 ----- +


Encabezados: + ---------------------- +
{'Fecha': 'Mié, 11 de marzo de 2020 18:03:20 GMT', 'Content-Type': 'application / xml', 'Content-Length': '522', 'Connection': 'keep-alive' , 'Servidor': 'gunicorn / 19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}


Datos devueltos: + ---------------------- +
<? xml version = '1.0' encoding = 'us-ascii'?>

<! - UN MUESTRA de diapositivas ->

<presentación de diapositivas 
    title = "Muestra de diapositivas"
    date = "Fecha de publicación"
    author = "Sinceramente suyo"
    >

    <! - DIAPOSITIVA DEL TÍTULO ->
    <slide type = "all">
      <title> ¡Despierta con WonderWidgets! </title>
    </slide>

    <! - VISTA GENERAL ->
    <slide type = "all">
        <title> Descripción general </title>
        <item> Por qué <em> WonderWidgets </em> son geniales </item>
        <artículo />
        <item> Quién <em> compra </em> WonderWidgets </item>
    </slide>

</slideshow>

Proceso terminado con código de salida 0

En nuestro código de prueba usamos una función python de printResponse () que resume la lógica para imprimir el código de respuesta, los encabezados y los datos devueltos. Se puede acceder a estos en el objeto de respuesta utilizando status_code , encabezados y propiedades de texto .

Incluyendo parámetros

En este fragmento de código, podemos enviar algunos parámetros junto con la solicitud. Primero, cambiaremos la URL que estamos usando de http://httpbin.org/xml a http://httpbin.org/get. El punto final GET en httpbin repite el contenido de la solicitud get en formato JSON. Para agregar los parámetros, definimos un diccionario que contiene pares clave-valor simples y le da el nombre de carga útil . Luego emitimos la solicitud mediante request.get (url, params = payload). Esto no necesita codificarse como lo hizo con la biblioteca urllib.

Código de respuesta: + ----- 200 ----- +


Encabezados: + ---------------------- +
{'Date': 'Mié, 11 de marzo de 2020 18:13:37 GMT', 'Content-Type': 'application / json', 'Content-Length': '410', 'Connection': 'keep-alive' , 'Servidor': 'gunicorn / 19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}


Datos devueltos: + ---------------------- +
{
  "argumentos": {
    "Crema": "Verdadero", 
    "Talla larga", 
    "Azúcar": "Falso"
  }, 
  "encabezados": {
    "Aceptar": "* / *", 
    "Accept-Encoding": "gzip, desinflar", 
    "Anfitrión": "httpbin.org", 
    "Agente de usuario": "solicitudes-python / 2.23.0", 
    "X-Amzn-Trace-Id": "Root = 1-5e692a51-71b500ab1d13d674526bc5d0"
  }, 
  "origen": "192.168.10.1", 
  "url": "http://httpbin.org/get?Size=Large&Cream=True&Sugar=False"
}


Proceso terminado con código de salida 0

Hacer una solicitud POST

Ahora queremos probar la realización de una solicitud POST utilizando la biblioteca de solicitudes. Se usará la misma carga útil para enviar la solicitud y veremos la diferencia que hace al usar POST frente a GET. Para realizar una solicitud POST, podemos usar el método .post () de la clase de solicitudes. Tenga en cuenta que el segundo parámetro para publicar () en datalugar de paramscomo era para la solicitud GET. La biblioteca de solicitudes tiene nombres de métodos que se asignan directamente a los verbos Http estándar.

Código de respuesta: + ----- 200 ----- +


Encabezados: + ---------------------- +
{'Date': 'Mié, 11 de marzo de 2020 20:23:51 GMT', 'Content-Type': 'application / json', 'Content-Length': '526', 'Connection': 'keep-alive' , 'Servidor': 'gunicorn / 19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}


Datos devueltos: + ---------------------- +
{
  "argumentos": {}, 
  "datos": "", 
  "archivos": {}, 
  "formulario": {
    "Crema": "Verdadero", 
    "Talla larga", 
    "Azúcar": "Falso"
  }, 
  "encabezados": {
    "Aceptar": "* / *", 
    "Accept-Encoding": "gzip, desinflar", 
    "Content-Length": "33", 
    "Content-Type": "application / x-www-form-urlencoded", 
    "Anfitrión": "httpbin.org", 
    "Agente de usuario": "solicitudes-python / 2.23.0", 
    "X-Amzn-Trace-Id": "Root = 1-5e6948d7-4b5b42c85acf7660e4e2c1a8"
  }, 
  "json": nulo, 
  "origen": "10.10.10.10", 
  "url": "http://httpbin.org/post"
}


Proceso terminado con código de salida 0

Envío de encabezados personalizados

Para probar el envío de un encabezado personalizado, volvamos al http://httpbin.org/get endpoint y eliminemos la carga útil de datos. Configuramos una variable customHeader y asignamos un diccionario que contiene pares clave-valor. Dentro de ese diccionario, podemos especificar el User-Agent, que a menudo se usa para identificar aplicaciones web personalizadas.

Código de respuesta: + ----- 200 ----- +


Encabezados: + ---------------------- +
{'Date': 'Mié, 11 de marzo de 2020 20:46:31 GMT', 'Content-Type': 'application / json', 'Content-Length': '312', 'Connection': 'keep-alive' , 'Servidor': 'gunicorn / 19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}


Datos devueltos: + ---------------------- +
{
  "argumentos": {}, 
  "encabezados": {
    "Aceptar": "* / *", 
    "Accept-Encoding": "gzip, desinflar", 
    "Anfitrión": "httpbin.org", 
    "User-Agent": "Gardens-Delight-App / 1.0.1", 
    "X-Amzn-Trace-Id": "Root = 1-5e694e27-6ade43401b07635c60af1748"
  }, 
  "origen": "1.2.3.4", 
  "url": "http://httpbin.org/get"
}


Proceso terminado con código de salida 0

Manejo de errores con HTTPError

A veces, las cosas salen mal cuando se comunica con servidores remotos en Internet. Un servidor puede estar inactivo o un usuario escribe mal una URL, o tal vez una conexión simplemente se agota. El código Python necesita poder responder a este tipo de situaciones. Para probar estados de error, httpbin proporciona algunos puntos finales diferentes para simular problemas. Primero, probaremos el punto final 404.

Error de Http: Error de cliente 404: NO ENCONTRADO para la URL: http://httpbin.org/status/404

Proceso terminado con código de salida 0

Manejo de un tiempo de espera

Solicitud agotada: HTTPConnectionPool (host = 'httpbin.org', puerto = 80): Se agotó el tiempo de lectura. (tiempo de espera de lectura = 3)

Proceso terminado con código de salida 0

Autenticación con solicitudes

Usar autenticación en solicitudes Http es una tarea común. La biblioteca Python Requests tiene soporte para la autenticación basada en web en forma de autenticación básica, credenciales Digest y Oauth. Podemos probar algunas solicitudes de autenticación utilizando el sitio web httpbin.

prueba de autenticación de httpbin

Para probar la autenticación básica, primero debemos especificar las credenciales para autorizar en el sitio web httpbin.

configuración de autenticación básica de httpbin

En httpbin ahora tenemos una configuración de punto final que podemos usar para probar. El punto final es https://httpbin.org/basic-auth/vegibit/secret según las credenciales que establecimos anteriormente. Si está siguiendo, puede usar el nombre de usuario y la contraseña que desee. Así que ahora podemos probar esto en nuestro código Python usando la clase HTTPBasicAuth de la biblioteca Requests.

Código de respuesta: + ----- 200 ----- +


Encabezados: + ---------------------- +
{'Date': 'Thu, 12 Mar 2020 14:36:41 GMT', 'Content-Type': 'application / json', 'Content-Length': '50', 'Connection': 'keep-alive' , 'Servidor': 'gunicorn / 19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}


Datos devueltos: + ---------------------- +
{
  "autenticado": verdadero, 
  "usuario": "vegibit"
}


Proceso terminado con código de salida 0

En la prueba anterior, ejecutamos esto en Pycharm y podemos ver los resultados. La retroalimentación JSON muestra que tenemos un estado autenticado de verdadero y el usuario es vegibit. Si proporcionamos la contraseña incorrecta y enviamos la solicitud nuevamente, ahora recibiremos comentarios diferentes. Se devuelve un mensaje 401 no autorizado que indica que, según las credenciales proporcionadas, no tenemos acceso. Además, en el área de datos devueltos, podemos ver que no hay ninguno.

Código de respuesta: + ----- 401 ----- +


Encabezados: + ---------------------- +
{'Date': 'Thu, 12 Mar 2020 14:41:42 GMT', 'Content-Length': '0', 'Connection': 'keep-alive', 'Server': 'gunicorn / 19.9.0' , 'WWW-Authenticate': 'Basic realm = "Fake Realm"', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}


Datos devueltos: + ---------------------- +


Proceso terminado con código de salida 0

Esto nos da una buena idea de cómo funciona la autenticación básica usando la biblioteca Python Requests.


Resumen de la biblioteca de solicitudes de Python

En este tutorial, aprendimos sobre la biblioteca Python Requests. Las solicitudes se basan en las funciones proporcionadas con el paquete urllib predeterminado en la biblioteca estándar de Python. Algunas de las tareas manuales que se necesitan con urllib, como la codificación de parámetros de datos, se realizan automáticamente en Solicitudes. Además, Requests intentará decodificar automáticamente la respuesta devuelta según su tipo. Tiene una API simple donde cada nombre de método coincide con los verbos Http disponibles. Los desarrolladores pueden incorporar parámetros, encabezados y cookies según sea necesario y se admiten todos los tipos comunes de autenticación.

  • API simple: cada verbo HTTP es un nombre de método
  • Facilita el trabajo con parámetros, encabezados y cookies
  • Decodifica automáticamente el contenido devuelto
  • Analiza automáticamente el contenido JSON cuando se detecta
  • Maneja redireccionamientos, tiempos de espera y errores
  • Admite autenticación y sesiones

Solicitudes de ejemplo



Publicar un comentario

0 Comentarios