Python Language
Python Requests Post
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)