Saltar al contenido

Solicitudes en Python – PythonForBeginners.com

¿Qué son las solicitudes?

El módulo de solicitudes es una biblioteca HTTP elegante y simple para Python.

¿Qué puedo hacer con las solicitudes?

Las solicitudes le permiten enviar solicitudes HTTP / 1.1.

Puede agregar encabezados, datos de formulario, archivos de varias partes y parámetros con diccionarios de Python simples y acceder a los datos de respuesta de la misma manera.

Tenga en cuenta que las notas de esta publicación se tomaron de Python-Requests.org: http://docs.python-requests.org/en/latest/

Solicita la instalación

Para instalar solicitudes, simplemente:
solicitudes de instalación de $ pip

O, si es absolutamente necesario:
$ solicitudes easy_install

Hacer una solicitud

Comience importando el módulo Solicitudes:
>>> solicitudes de importación

Ahora, intentemos obtener una página web.

Para este ejemplo, obtengamos la línea de tiempo pública de GitHub

>>> r = requests.get('https://github.com/timeline.json')

# Ahora, tenemos un objeto Response llamado r. Podemos obtener toda la información que necesitamos de este objeto.

Para realizar una solicitud HTTP POST

>>> r = requests.post("http://httpbin.org/post")

You can also use other HTTP request types, like PUT, DELETE, HEAD and OPTIONS

>>> r = requests.put("http://httpbin.org/put")

>>> r = requests.delete("http://httpbin.org/delete")

>>> r = requests.head("http://httpbin.org/get")

>>> r = requests.options("http://httpbin.org/get")

Contenido de respuesta

Podemos leer el contenido de la respuesta del servidor.

Considere la línea de tiempo de GitHub nuevamente:

>>> solicitudes de importación >>> r = solicitudes.get ('https://github.com/timeline.json') >>> r.text '[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests will automatically decode content from the server.

Most unicode charsets are seamlessly decoded.

When you make a request, Requests makes educated guesses about the encoding of
the response based on the HTTP headers.

Recommended Python Training

For Python training, our top recommendation is DataCamp.

The text encoding guessed by Requests is used when you access r.text.

You can find out what encoding Requests is using, and change it, using the
r.encoding property:

>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'

If you change the encoding, Requests will use the new value of r.encoding
whenever you call r.text.

Binary Response Content

You can also access the response body as bytes, for non-text requests:

>>> r.content
b'[{"repository":{"open_issues":0,"url":"https://github.com/...

JSON Response Content

There’s also a builtin JSON decoder, in case you’re dealing with JSON data:

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

In case the JSON decoding fails, r.json simply returns None.

Custom Headers

If you’d like to add HTTP headers to a request,
simply pass in a dict to the headers parameter.

For example, we didn’t specify our content-type in the previous example:

>>> import json
>>> url="https://api.github.com/some/endpoint"
>>> payload = {'some': 'data'}
>>> headers = {'content-type': 'application/json'}

>>> r = requests.post(url, data=json.dumps(payload), headers=headers)

Response Status Codes

We can check the response status code:

>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200
# Requests also comes with a built-in status code lookup object for easy reference:
>>> r.status_code == requests.codes.ok
True
# If we made a bad request (non-200 response), 
# we can raise it with Response.raise_for_status():
>>> bad_r = requests.get('http://httpbin.org/status/404')
>>> bad_r.status_code
404

Response Headers

We can view the server’s response headers using a Python dictionary:

>>> r.headers
{
    'status': '200 OK',
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '148ms',
    'etag': '"e1ca502697e5c9317743dc078f67693f"',
    'content-type': 'application/json; charset=utf-8'
}

HTTP Headers are case-insensitive, so we can access the headers using any
capitalization we want:

>>> r.headers['Content-Type']
'aplicación / json;  conjunto de caracteres = utf-8 '>>> r.headers.get (' tipo de contenido ')' aplicación / json;  charset = utf-8 '# Si no existe un encabezado en la Respuesta, su valor predeterminado es Ninguno: >>> r.headers['X-Random']
Ninguno

Galletas

Si una respuesta contiene algunas cookies, puede obtener acceso rápido a ellas:

>>> url="http://httpbin.org/cookies/set/requests-is/awesome"
>>> r = requests.get(url)

>>> r.cookies['requests-is']
'awesome'
# To send your own cookies to the server, you can use the cookies parameter:

>>> url="http://httpbin.org/cookies"
>>> cookies = dict(cookies_are="working")

>>> r = requests.get(url, cookies=cookies)

>>> r.text
'{"cookies": {"cookies_are": "working"}}'

Autenticación básica

Muchos servicios web requieren autenticación.

Hay muchos tipos diferentes de autenticación, pero el más común es HTTP.
Autenticación básica

Hacer solicitudes con la autenticación básica es extremadamente simple:

from requests.auth import HTTPBasicAuth
requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))


# Due to the prevalence of HTTP Basic Auth, 
# requests provides a shorthand for this authentication method:

requests.get('https://api.github.com/user', auth=('user', 'pass'))

Proporcionar las credenciales como una tupla de esta manera es funcionalmente equivalente a la
Ejemplo de HTTPBasicAuth anterior.

Autenticación implícita

# Another popular form of web service protection is Digest Authentication:

>>> from requests.auth import HTTPDigestAuth

>>> url="http://httpbin.org/digest-auth/auth/user/pass"

>>> requests.get(url, auth=HTTPDigestAuth('user', 'pass'))

Redirección e historial

Las solicitudes realizarán automáticamente la redirección de ubicación mientras usan GET
y verbos OPCIONES.

GitHub redirige todas las solicitudes HTTP a HTTPS.

Podemos usar el método de historial del objeto Response para rastrear la redirección.

Veamos qué hace Github:

>>> import requests
>>> r = requests.get("http://github.com")
>>> r.url
u'https://github.com/'
>>> r.status_code
200
>>> r.history
[]
>>>

La lista Response.history contiene una lista de los objetos Request que fueron
creado para completar la solicitud.

La lista está ordenada de la solicitud más antigua a la más reciente.

Si está usando GET u OPTIONS, puede deshabilitar el manejo de redireccionamiento con el
parámetro allow_redirects:

>>> r = requests.get('http://github.com', allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]

Tiempos de espera

Puede indicar a las solicitudes que dejen de esperar una respuesta después de un número determinado de
segundos con el parámetro de tiempo de espera:

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "", line 1, in 
requests.exceptions.Timeout: Request timed out.

Errores y excepciones

En caso de un problema de red (por ejemplo, falla de DNS, conexión rechazada, etc.),
Las solicitudes generarán una excepción ConnectionError.

En el caso de la rara respuesta HTTP no válida,
Las solicitudes generarán una excepción HTTPError.

Si se agota el tiempo de espera de una solicitud, se genera una excepción de tiempo de espera.

Si una solicitud excede el número configurado de redirecciones máximas,
Se genera una excepción TooManyRedirects.

Todas las excepciones que Requests plantea explícitamente heredan de
request.exceptions.RequestException.

Puede consultar los documentos de la API de configuración para obtener información
HTTPError excepciones a través de la opción danger_mode o tienen solicitudes
captura la mayoría de las solicitudes. excepciones.

RequestException excepciones con la opción safe_mode.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.