0% encontró este documento útil (0 votos)
55 vistas

Módulo Requests Python

El módulo Requests de Python permite enviar solicitudes HTTP y HTTPS desde Python. Proporciona una interfaz de alto nivel para realizar solicitudes y recibir respuestas, incluidos métodos para enviar solicitudes GET, POST, PUT, DELETE y más. El objeto Response devuelto contiene datos como el contenido, código de estado y encabezados de la respuesta.

Cargado por

Odra Mathison
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
55 vistas

Módulo Requests Python

El módulo Requests de Python permite enviar solicitudes HTTP y HTTPS desde Python. Proporciona una interfaz de alto nivel para realizar solicitudes y recibir respuestas, incluidos métodos para enviar solicitudes GET, POST, PUT, DELETE y más. El objeto Response devuelto contiene datos como el contenido, código de estado y encabezados de la respuesta.

Cargado por

Odra Mathison
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

Módulo Requests de 

Python

Ejemplo
Solicite una página web e imprima el texto de respuesta:

import requests

x = requests.get('https://w3schools.com/python/demopage.htm')

print(x.text)

Definición y uso
El requestsmódulo le permite enviar solicitudes HTTP utilizando Python.

La solicitud HTTP devuelve un Objeto de respuesta con todos los datos de respuesta


(contenido, codificación, estado, etc.).

Descargue e instale el módulo Requests


Navegue su línea de comando a la ubicación de PIP y escriba lo siguiente:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip install


requests

Sintaxis
requests.methodname(params)

Métodos

Method Description

delete(url, args) Sends a DELETE request to the specified url

get(url, params, args) Sends a GET request to the specified url


head(url, args) Sends a HEAD request to the specified url

patch(url, data, args) Sends a PATCH request to the specified url

post(url, data, json, args) Sends a POST request to the specified url

put(url, data, args) Sends a PUT request to the specified url

request(method, url, args) Sends a request of the specified method to the specified url

http.client- Cliente de protocolo HTTP 


Código fuente: Lib / http / client.py

Este módulo define clases que implementan el lado del cliente de los protocolos HTTP y HTTPS. Normalmente
no se usa directamente; el módulo lo urllib.requestusa para manejar URL que usan HTTP y HTTPS.

Ver también

El paquete de solicitudes se recomienda para una interfaz de cliente HTTP de nivel superior.

Nota

El soporte HTTPS solo está disponible si Python se compiló con soporte SSL (a través del sslmódulo).

El módulo proporciona las siguientes clases:

clase  http.client.HTTPConnection( host , puerto = None , [ timeout , ] source_address = None , blocksize =


8192  ) 

Una HTTPConnectioninstancia representa una transacción con un servidor HTTP. Se debe instanciar pasándole
un host y un número de puerto opcional. Si no se pasa ningún número de puerto, el puerto se extrae de la
cadena de host si tiene el formulario host:port; de lo contrario, se usa el puerto HTTP predeterminado (80). Si
se proporciona el parámetro de tiempo de espera opcional , las operaciones de bloqueo (como los intentos de
conexión) se agotarán después de esos segundos (si no se da, se usa la configuración de tiempo de espera
predeterminada global). El parámetro opcional source_address puede ser una tupla de un (host, puerto) para
usar como la dirección de origen desde la que se realiza la conexión
HTTP. El parámetro opcional blockize establece el tamaño del búfer en bytes para enviar un cuerpo de mensaje
similar a un archivo.

Por ejemplo, las siguientes llamadas crean instancias que se conectan al servidor en el mismo host y puerto:

>>>

>>> h1 = http.client.HTTPConnection('www.python.org')

>>> h2 = http.client.HTTPConnection('www.python.org:80')

>>> h3 = http.client.HTTPConnection('www.python.org', 80)

>>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)

Cambiado en la versión 3.2: se agregó source_address .

Cambiado en la versión 3.4: La estricta parámetro se eliminó. Las "respuestas simples" de estilo HTTP 0.9 ya no


son compatibles.

Modificado en la versión 3.7: se agregó el parámetro de tamaño de bloque .

class  http.client.HTTPSConnection( host , port = None , key_file = None , cert_file =


None , [ timeout , ] source_address = None , * , context = None , check_hostname = None , blocksize = 8192  ) 

Una subclase de HTTPConnectioneso usa SSL para la comunicación con servidores seguros. El puerto por
defecto es 443. Si se especifica el contexto , debe ser una ssl.SSLContextinstancia que describa las diversas
opciones de SSL.

Lea las Consideraciones de seguridad para obtener más información sobre las mejores prácticas.

Cambiado en la versión 3.2: se  agregaron source_address , context y check_hostname .

Modificado en la versión 3.2: esta clase ahora admite hosts virtuales HTTPS si es posible (es decir,
si ssl.HAS_SNIes cierto).

Cambiado en la versión 3.4: La estricta parámetro se eliminó. Las "respuestas simples" de estilo HTTP 0.9 ya no


son compatibles.

Modificado en la versión 3.4.3: esta clase ahora realiza todas las comprobaciones necesarias de certificados y
nombres de host de forma predeterminada. Para volver al comportamiento anterior, no
verificado, ssl._create_unverified_context()se puede pasar al parámetro de contexto .

Cambiado en la versión 3.8: esta clase ahora habilita TLS 1.3 ssl.SSLContext.post_handshake_authpara


el contexto predeterminado o cuando cert_file se pasa con un contexto personalizado .

En desuso desde la versión 3.6:  key_file y cert_file están en desuso a favor del contexto . Utilice en


su ssl.SSLContext.load_cert_chain()lugar, o deje que ssl.create_default_context()seleccione los certificados de
CA de confianza del sistema por usted.

El parámetro check_hostname también está en desuso; el ssl.SSLContext.check_hostnameatributo


de contexto debe usarse en su lugar.

clase  http.client.HTTPResponse( calcetín , debuglevel = 0 , método = Ninguno , url = Ninguno  ) 


Clase cuyas instancias se devuelven tras una conexión exitosa. No instanciado directamente por el usuario.

Cambiado en la versión 3.4: La estricta parámetro se eliminó. Las "respuestas simples" del estilo HTTP 0.9 ya no
son compatibles.

Este módulo proporciona la siguiente función:

http.client.parse_headers( fp  ) 

Analiza los encabezados desde un puntero de archivo fp que representa una solicitud / respuesta HTTP. El
archivo debe ser un BufferedIOBaselector (es decir, no texto) y debe proporcionar unEncabezado de estilo RFC
2822 .

Esta función devuelve una instancia http.client.HTTPMessage que contiene los campos de encabezado, pero no
carga útil (lo mismo que HTTPResponse.msg y http.server.BaseHTTPRequestHandler.headers). Después de
regresar, el puntero de archivo fp está listo para leer el cuerpo HTTP.

Nota

parse_headers()no analiza la línea de inicio de un mensaje HTTP; solo analiza las líneas. El archivo tiene que
estar listo para leer estas líneas de campo, por lo que la primera línea ya debe consumirse antes de llamar a la
función.Name: value

Las siguientes excepciones se plantean según corresponda:

excepción  http.client.HTTPException

La clase base de las otras excepciones en este módulo. Es una subclase de Exception.

excepción  http.client.NotConnected

Una subclase de HTTPException.

excepción  http.client.InvalidURL

Una subclase de HTTPException, generada si se proporciona un puerto y no es numérico o está vacío.

excepción  http.client.UnknownProtocol

Una subclase de HTTPException.

excepción  http.client.UnknownTransferEncoding

Una subclase de HTTPException.

excepción  http.client.UnimplementedFileMode

Una subclase de HTTPException.

excepción  http.client.IncompleteRead

Una subclase de HTTPException.

excepción  http.client.ImproperConnectionState

Una subclase de HTTPException.


excepción  http.client.CannotSendRequest

Una subclase de ImproperConnectionState.

excepción  http.client.CannotSendHeader

Una subclase de ImproperConnectionState.

excepción  http.client.ResponseNotReady

Una subclase de ImproperConnectionState.

excepción  http.client.BadStatusLine

Una subclase de HTTPException. Se genera si un servidor responde con un código de estado HTTP que no
entendemos.

excepción  http.client.LineTooLong

Una subclase de HTTPException. Se genera si se recibe una línea excesivamente larga en el protocolo HTTP del
servidor.

excepción  http.client.RemoteDisconnected

Una subclase de ConnectionResetErrory BadStatusLine. Se HTTPConnection.getresponse()genera cuando el


intento de leer la respuesta no produce datos leídos de la conexión, lo que indica que el extremo remoto ha
cerrado la conexión.

Nuevo en la versión 3.5: Anteriormente, se planteó.BadStatusLine('')

Las constantes definidas en este módulo son:

http.client.HTTP_PORT

El puerto predeterminado para el protocolo HTTP (siempre 80).

http.client.HTTPS_PORT

El puerto predeterminado para el protocolo HTTPS (siempre 443).

http.client.responses

Este diccionario asigna los códigos de estado HTTP 1.1 a los nombres W3C.

Ejemplo: http.client.responses[http.client.NOT_FOUND]is .'Not Found'

Consulte los códigos de estado HTTP para obtener una lista de los códigos de estado HTTP que están
disponibles en este módulo como constantes.
Objetos de conexión HTTP 
HTTPConnection las instancias tienen los siguientes métodos:

HTTPConnection.request( método , url , cuerpo = Ninguno , encabezados = {} , * , encode_chunked = False  ) 

Esto enviará una solicitud al servidor utilizando el método del método de solicitud HTTP y la url del selector .

Si se especifica el cuerpo , los datos especificados se envían después de que los encabezados hayan
terminado. Puede ser un str, un objeto similar a bytes , un objeto de archivo abierto o un iterable de bytes. Si
el cuerpo es una cadena, se codifica como ISO-8859-1, el valor predeterminado para HTTP. Si es un objeto de
tipo bytes, los bytes se envían tal cual. Si es un objeto de archivo, se envía el contenido del archivo; Este objeto
de archivo debe admitir al menos el read()método. Si el objeto de archivo es una instancia de io.TextIOBase, los
datos devueltos por el read() método se codificarán como ISO-8859-1; de lo contrario, los datos devueltos
por read()se enviarán tal cual. Si cuerpo es un iterable, los elementos del iterable se envían tal cual hasta que
se agota el iterable.

El argumento de encabezados debe ser una asignación de encabezados HTTP adicionales para enviar con la
solicitud.

Si los encabezados no contienen Content-Length ni Transfer-Encoding, pero hay un cuerpo de solicitud, uno de


esos campos de encabezado se agregará automáticamente. Si el cuerpo es None, la cabecera Content-Length
se establece en 0los métodos que esperan un cuerpo ( PUT, POSTy PATCH). Si el cuerpo es una cadena o un
objeto similar a bytes que no es también un archivo , el encabezado Content-Length se establece en su
longitud. Cualquier otro tipo de cuerpo (archivos e iterables en general) se codificará en fragmentos, y el
encabezado Transfer-Encoding se establecerá automáticamente en lugar de Content-Length.

El argumento encode_chunked solo es relevante si Transfer-Encoding se especifica en


los encabezados . Si encode_chunked es False, el objeto HTTPConnection supone que toda la codificación es
manejada por el código de llamada. Si es así True, el cuerpo estará codificado en fragmentos.

Nota

La codificación de transferencia fragmentada se ha agregado al protocolo HTTP versión 1.1. A menos que se
sepa que el servidor HTTP maneja HTTP 1.1, la persona que llama debe especificar la longitud del contenido o
debe pasar un strobjeto similar a bytes o que no sea también un archivo como la representación del cuerpo.

Nuevo en la versión 3.2: el  cuerpo ahora puede ser iterable.

Cambiado en la versión 3.6: si ni Content-Length ni Transfer-Encoding están configurados en encabezados , el


archivo y los objetos de cuerpo iterables ahora están codificados en fragmentos. Se agregó el
argumento encode_chunked . No se intenta determinar la longitud del contenido para los objetos de archivo.

HTTPConnection.getresponse( ) 

Debe llamarse después de enviar una solicitud para obtener la respuesta del servidor. Devuelve
una HTTPResponseinstancia.

Nota

 
Tenga en cuenta que debe haber leído la respuesta completa antes de poder enviar una nueva solicitud al
servidor.

Modificado en la versión 3.5: si se ConnectionErrorgenera una o una subclase, el HTTPConnectionobjeto estará


listo para volver a conectarse cuando se envíe una nueva solicitud.

HTTPConnection.set_debuglevel( nivel  ) 

Establecer el nivel de depuración. El nivel de depuración predeterminado es 0, lo que significa que no se
imprime ninguna salida de depuración. Cualquier valor mayor que 0hará que todos los resultados de
depuración definidos actualmente se impriman en stdout. El debuglevel se pasa a
cualquier HTTPResponseobjeto nuevo que se cree.

Nuevo en la versión 3.1.

HTTPConnection.set_tunnel( host , puerto = Ninguno , encabezados = Ninguno  ) 

Configure el host y el puerto para el túnel de conexión HTTP. Esto permite ejecutar la conexión a través de un
servidor proxy.

Los argumentos de host y puerto especifican el punto final de la conexión tunelizada (es decir, la dirección
incluida en la solicitud CONNECT, no la dirección del servidor proxy).

El argumento de los encabezados debe ser una asignación de encabezados HTTP adicionales para enviar con la
solicitud CONNECT.

Por ejemplo, para hacer un túnel a través de un servidor proxy HTTPS que se ejecuta localmente en el puerto
8080, pasaríamos la dirección del proxy al HTTPSConnection constructor, y la dirección del host al que
finalmente queremos llegar al set_tunnel()método:

>>>

>>> import http.client

>>> conn = http.client.HTTPSConnection("localhost", 8080)

>>> conn.set_tunnel("www.python.org")

>>> conn.request("HEAD","/index.html")

Nuevo en la versión 3.2.

HTTPConnection.connect( ) 

Conéctese al servidor especificado cuando se creó el objeto. Por defecto, esto se llama automáticamente
cuando se realiza una solicitud si el cliente aún no tiene una conexión.

HTTPConnection.close( ) 

Cierre la conexión al servidor.

HTTPConnection.blocksize

Tamaño del búfer en bytes para enviar un cuerpo de mensaje similar a un archivo.

Nuevo en la versión 3.7.


Como alternativa al uso del request()método descrito anteriormente, también puede enviar su solicitud paso a
paso, utilizando las cuatro funciones a continuación.

HTTPConnection.putrequest( método , url , skip_host = False , skip_accept_encoding = False  ) 

Esta debería ser la primera llamada después de que se haya realizado la conexión al servidor. Envía una línea al
servidor que consta de la cadena de método , la cadena de url y la versión HTTP ( HTTP/1.1). Para deshabilitar
el envío automático de encabezados Host:o Accept-Encoding:(por ejemplo, para aceptar codificaciones de
contenido adicionales), especifique skip_host o skip_accept_encoding con valores no falsos.

HTTPConnection.putheader( encabezado , argumento  [ , ...  ] ) 

Mandar un Encabezado de estilo RFC 822 al servidor. Envía una línea al servidor que consta del encabezado,
dos puntos y un espacio, y el primer argumento. Si se dan más argumentos, se envían líneas de continuación,
cada una de las cuales consta de una pestaña y un argumento.

HTTPConnection.endheaders( message_body = None , * , encode_chunked = False  ) 

Envíe una línea en blanco al servidor, señalando el final de los


encabezados. El argumento opcional message_body se puede usar para pasar un cuerpo de mensaje asociado
con la solicitud.

Si encode_chunked es True, el resultado de cada iteración de message_body se codificará en fragmentos como


se especifica enRFC 7230 , Sección 3.3.1. La forma en que se codifican los datos depende del tipo
de mensaje_cuerpo . Si  message_body implementa la interfaz del búfer, la codificación dará como resultado un
único fragmento. Si  message_body es uncollections.abc.Iterable, cada iteración de  message_body dará como
resultado un fragmento. Si  message_body es un objeto de archivo , cada llamada a.read()resultará en un
fragmento. El método señala automáticamente el final de los datos codificados en fragmentos inmediatamente
después de  message_body .

Nota

Debido a la especificación de codificación fragmentada, el codificador fragmentador ignorará los fragmentos


vacíos producidos por un cuerpo iterador. Esto es para evitar la terminación prematura de la lectura de la
solicitud por parte del servidor de destino debido a una codificación con formato incorrecto.

Nuevo en la versión 3.6: soporte de codificación fragmentada. El parámetro encode_chunked fue agregado.

HTTPConnection.send( datos  ) 

Enviar datos al servidor. Esto debe usarse directamente solo después de endheaders()que se haya
llamado al método y antes de que getresponse()se llame.

Objetos HTTPResponse 

Una HTTPResponseinstancia envuelve la respuesta HTTP del servidor. Proporciona acceso a los encabezados de


solicitud y al cuerpo de la entidad. La respuesta es un objeto iterable y puede usarse en una declaración with.

Cambiado en la versión 3.5: la io.BufferedIOBaseinterfaz ahora está implementada y todas sus operaciones de


lectura son compatibles.

HTTPResponse.read( [ amt  ] ) 
Lee y devuelve el cuerpo de respuesta, o hasta los siguientes bytes de amt .

HTTPResponse.readinto( b  ) 

Lee hasta los siguientes bytes len (b) del cuerpo de respuesta en el búfer b . Devuelve el número de bytes
leídos.

Nuevo en la versión 3.3.

HTTPResponse.getheader( nombre , predeterminado = Ninguno  ) 

Devuelve el valor del nombre del encabezado , o predeterminado si no hay un nombre que coincida con el


encabezado . Si hay más de un encabezado con el nombre nombre , devolver todos los valores unidos por ''. Si
'default' es cualquier iterable que no sea una sola cadena, sus elementos se devuelven de manera similar
unidos por comas.

HTTPResponse.getheaders( ) 

Devuelve una lista de tuplas (encabezado, valor).

HTTPResponse.fileno( ) 

Devuelve el filenodel zócalo subyacente.

HTTPResponse.msg

Una http.client.HTTPMessageinstancia que contiene los encabezados de respuesta. http.client.HTTPMessagees


una subclase de email.message.Message.

HTTPResponse.version

Versión del protocolo HTTP utilizada por el servidor. 10 para HTTP / 1.0, 11 para HTTP / 1.1.

HTTPResponse.status

Código de estado devuelto por el servidor.

HTTPResponse.reason

Frase de razón devuelta por el servidor.

HTTPResponse.debuglevel

Un gancho de depuración. Si debugleveles mayor que cero, los mensajes se imprimirán en stdout a medida que
se lea y analice la respuesta.

HTTPResponse.closed

Es Truesi el flujo está cerrado.

Ejemplos 

Aquí hay una sesión de ejemplo que usa el GETmétodo:

>>>

>>> import http.client


>>> conn = http.client.HTTPSConnection("www.python.org")

>>> conn.request("GET", "/")

>>> r1 = conn.getresponse()

>>> print(r1.status, r1.reason)

200 OK

>>> data1 = r1.read() # This will return entire content.

>>> # The following example demonstrates reading data in chunks.

>>> conn.request("GET", "/")

>>> r1 = conn.getresponse()

>>> while chunk := r1.read(200):

... print(repr(chunk))

b'<!doctype html>\n<!--[if"...

...

>>> # Example of an invalid request

>>> conn = http.client.HTTPSConnection("docs.python.org")

>>> conn.request("GET", "/parrot.spam")

>>> r2 = conn.getresponse()

>>> print(r2.status, r2.reason)

404 Not Found

>>> data2 = r2.read()

>>> conn.close()

Aquí hay una sesión de ejemplo que usa el HEADmétodo. Tenga en cuenta que el HEADmétodo nunca devuelve
ningún dato.

>>>

>>> import http.client

>>> conn = http.client.HTTPSConnection("www.python.org")

>>> conn.request("HEAD", "/")

>>> res = conn.getresponse()

>>> print(res.status, res.reason)

200 OK
>>> data = res.read()

>>> print(len(data))

>>> data == b''

True

Aquí hay una sesión de ejemplo que muestra cómo POSTsolicitar:

>>>

>>> import http.client, urllib.parse

>>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})

>>> headers = {"Content-type": "application/x-www-form-urlencoded",

... "Accept": "text/plain"}

>>> conn = http.client.HTTPConnection("bugs.python.org")

>>> conn.request("POST", "", params, headers)

>>> response = conn.getresponse()

>>> print(response.status, response.reason)

302 Found

>>> data = response.read()

>>> data

b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'

>>> conn.close()

Las solicitudes del lado del cliente son muy similares a las solicitudes. La diferencia radica solo en el lado del
servidor donde el servidor HTTP permitirá que se creen recursos mediante solicitud. Cabe señalar que los
métodos HTTP personalizados también se manejan configurando el atributo de método apropiado. Aquí hay
una sesión de ejemplo que muestra cómo enviar una solicitud usando
http.client:HTTP PUTPOSTPUTurllib.request.RequestPUT

>>>

>>> # This creates an HTTP message

>>> # with the content of BODY as the enclosed representation

>>> # for the resource http://localhost:8080/file

...

>>> import http.client


>>> BODY = "***filecontents***"

>>> conn = http.client.HTTPConnection("localhost", 8080)

>>> conn.request("PUT", "/file", BODY)

>>> response = conn.getresponse()

>>> print(response.status, response.reason)

200, OK

Objetos HTTPMessage 

Una http.client.HTTPMessageinstancia contiene los encabezados de una respuesta HTTP. Se implementa


utilizando la email.message.Messageclase.

También podría gustarte