Módulo Requests Python
Módulo Requests Python
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.
Sintaxis
requests.methodname(params)
Métodos
Method Description
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).
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')
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.
Modificado en la versión 3.2: esta clase ahora admite hosts virtuales HTTPS si es posible (es decir,
si ssl.HAS_SNIes cierto).
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.4: La estricta parámetro se eliminó. Las "respuestas simples" del estilo HTTP 0.9 ya no
son compatibles.
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
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
excepción http.client.InvalidURL
excepción http.client.UnknownProtocol
excepción http.client.UnknownTransferEncoding
excepción http.client.UnimplementedFileMode
excepción http.client.IncompleteRead
excepción http.client.ImproperConnectionState
excepción http.client.CannotSendHeader
excepción http.client.ResponseNotReady
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
http.client.HTTP_PORT
http.client.HTTPS_PORT
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:
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.
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.
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.
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.
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:
>>>
>>> conn.set_tunnel("www.python.org")
>>> conn.request("HEAD","/index.html")
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( )
HTTPConnection.blocksize
Tamaño del búfer en bytes para enviar un cuerpo de mensaje similar a un archivo.
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.
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.
Nota
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
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.
HTTPResponse.getheader( nombre , predeterminado = Ninguno )
HTTPResponse.getheaders( )
HTTPResponse.fileno( )
HTTPResponse.msg
HTTPResponse.version
Versión del protocolo HTTP utilizada por el servidor. 10 para HTTP / 1.0, 11 para HTTP / 1.1.
HTTPResponse.status
HTTPResponse.reason
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
Ejemplos
>>>
>>> r1 = conn.getresponse()
200 OK
>>> r1 = conn.getresponse()
... print(repr(chunk))
b'<!doctype html>\n<!--[if"...
...
>>> r2 = conn.getresponse()
>>> 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.
>>>
200 OK
>>> data = res.read()
>>> print(len(data))
True
>>>
302 Found
>>> data
>>> 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
>>>
...
200, OK
Objetos HTTPMessage