Buscar..


Introducción

Documentación para el módulo de solicitudes de Python en el contexto del método HTTP POST y su función de solicitudes correspondiente

Post simple

from requests import post

foo = post('http://httpbin.org/post', data = {'key':'value'})

Realizará una simple operación HTTP POST. Los datos publicados pueden ser en la mayoría de los formatos, sin embargo, los pares de valores clave son los más frecuentes.

Encabezados

Los encabezados pueden ser vistos:

print(foo.headers)

Un ejemplo de respuesta:

{'Content-Length': '439', 'X-Processed-Time': '0.000802993774414', 'X-Powered-By': 'Flask', 'Server': 'meinheld/0.6.1', 'Connection': 'keep-alive', 'Via': '1.1 vegur', 'Access-Control-Allow-Credentials': 'true', 'Date': 'Sun, 21 May 2017 20:56:05 GMT', 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json'}

Los encabezados también se pueden preparar antes de la publicación:

headers = {'Cache-Control':'max-age=0',
        'Upgrade-Insecure-Requests':'1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
        'Content-Type':'application/x-www-form-urlencoded',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Referer':'https://www.groupon.com/signup',
        'Accept-Encoding':'gzip, deflate, br',
        'Accept-Language':'es-ES,es;q=0.8'
        }

 foo = post('http://httpbin.org/post', headers=headers, data = {'key':'value'})

Codificación

La codificación se puede configurar y ver de la misma manera:

 print(foo.encoding)

'utf-8'

foo.encoding = 'ISO-8859-1'

Verificación SSL

Las solicitudes por defecto valida los certificados SSL de los dominios. Esto puede ser anulado:

foo = post('http://httpbin.org/post', data = {'key':'value'}, verify=False)

Redireccion

Se seguirá cualquier redirección (por ejemplo, http a https), esto también se puede cambiar:

foo = post('http://httpbin.org/post', data = {'key':'value'}, allow_redirects=False)

Si la operación posterior se ha redirigido, se puede acceder a este valor:

print(foo.url) 

Se puede ver un historial completo de redirecciones:

print(foo.history) 

Formulario de datos codificados

from requests import post

payload = {'key1' : 'value1',
           'key2' : 'value2'
           }

foo = post('http://httpbin.org/post', data=payload)

Para pasar datos codificados de forma con la operación posterior, los datos deben estructurarse como diccionario y suministrarse como el parámetro de datos.

Si los datos no desean estar codificados en forma, simplemente pase una cadena o un entero al parámetro de datos.

Suministre el diccionario al parámetro json para que Solicitudes formateen los datos automáticamente:

from requests import post

payload = {'key1' : 'value1', 'key2' : 'value2'}

foo = post('http://httpbin.org/post', json=payload)

Subir archivo

Con el módulo de solicitudes, solo es necesario proporcionar un identificador de archivo en lugar de los contenidos recuperados con .read() :

from requests import post

files = {'file' : open('data.txt', 'rb')}

foo = post('http://http.org/post', files=files)

Nombre de archivo, tipo de contenido y encabezados también se pueden configurar:

files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}

foo = requests.post('http://httpbin.org/post', files=files)

Las cadenas también se pueden enviar como un archivo, siempre que se proporcionen como el parámetro de files .

Múltiples archivos

Se pueden suministrar varios archivos de la misma manera que un archivo:

multiple_files = [
    ('images', ('foo.png', open('foo.png', 'rb'), 'image/png')),
    ('images', ('bar.png', open('bar.png', 'rb'), 'image/png'))]

foo = post('http://httpbin.org/post', files=multiple_files)

Respuestas

Los códigos de respuesta se pueden ver desde una operación posterior:

from requests import post

foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.status_code)

Datos devueltos

Accediendo a los datos que se devuelven:

foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.text)

Respuestas crudas

En los casos en que necesite acceder al objeto subyacente urllib3 response.HTTPResponse, esto se puede hacer de la siguiente manera:

foo = post('http://httpbin.org/post', data={'data' : 'value'})
res = foo.raw

print(res.read())

Autenticación

Autenticación HTTP simple

La autenticación HTTP simple se puede lograr con lo siguiente:

from requests import post

foo = post('http://natas0.natas.labs.overthewire.org', auth=('natas0', 'natas0'))

Esta es una mano técnicamente corta para lo siguiente:

from requests import post
from requests.auth import HTTPBasicAuth

foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPBasicAuth('natas0', 'natas0'))

Autentificación HTTP Digest

La autenticación HTTP Digest se realiza de una manera muy similar, las solicitudes proporcionan un objeto diferente para esto:

from requests import post
from requests.auth import HTTPDigestAuth

foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPDigestAuth('natas0', 'natas0'))

Autenticación personalizada

En algunos casos, los mecanismos de autenticación integrados pueden no ser suficientes, imagine este ejemplo:

Un servidor está configurado para aceptar la autenticación si el remitente tiene la cadena de usuario-agente correcta, un cierto valor de encabezado y proporciona las credenciales correctas a través de la autenticación básica HTTP. Para lograr esto, se debe preparar una clase de autenticación personalizada, subclasificando AuthBase, que es la base para las implementaciones de autenticación de solicitudes:

from requests.auth import AuthBase
from requests.auth import _basic_auth_str
from requests._internal_utils import to_native_string

class CustomAuth(AuthBase):

    def __init__(self, secret_header, user_agent , username, password):
        # setup any auth-related data here
        self.secret_header =  secret_header
        self.user_agent = user_agent
        self.username = username
        self.password = password

    def __call__(self, r):
        # modify and return the request
        r.headers['X-Secret'] = self.secret_header
        r.headers['User-Agent'] = self.user_agent
        r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
        
        return r

Esto puede ser utilizado con el siguiente código:

foo = get('http://test.com/admin', auth=CustomAuth('SecretHeader', 'CustomUserAgent', 'user', 'password' ))

Proxies

Cada operación POST de solicitud puede configurarse para usar proxies de red

Proxies HTTP / S

from requests import post

proxies = {
  'http': 'http://192.168.0.128:3128',
  'https': 'http://192.168.0.127:1080',
   }

foo = requests.post('http://httpbin.org/post', proxies=proxies)

La autenticación básica HTTP se puede proporcionar de esta manera:

proxies = {'http': 'http://user:[email protected]:312'}
foo = requests.post('http://httpbin.org/post', proxies=proxies)

SOCKS Proxies

El uso de proxies de calcetines requiere requests[socks] dependencias de terceros requests[socks] ; una vez instalados, los proxies de calcetines se utilizan de manera muy similar a HTTPBasicAuth:

proxies = {
'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port'
}

foo = requests.post('http://httpbin.org/post', proxies=proxies)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow