Python Language
Python vraagt om bericht
Zoeken…
Invoering
Documentatie voor de Python Requests-module in de context van de HTTP POST-methode en de bijbehorende Requests-functie
Eenvoudig bericht
from requests import post
foo = post('http://httpbin.org/post', data = {'key':'value'})
Zal een eenvoudige HTTP POST-bewerking uitvoeren. Geposte gegevens kunnen de meeste indelingen hebben, maar sleutel / waarde-paren komen het meest voor.
headers
Headers kunnen worden bekeken:
print(foo.headers)
Een voorbeeldreactie:
{'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'}
Headers kunnen ook worden voorbereid vóór de post:
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'})
codering
Codering kan op vrijwel dezelfde manier worden ingesteld en bekeken:
print(foo.encoding)
'utf-8'
foo.encoding = 'ISO-8859-1'
SSL-verificatie
Aanvragen valideren standaard SSL-certificaten van domeinen. Dit kan worden opgeheven:
foo = post('http://httpbin.org/post', data = {'key':'value'}, verify=False)
Redirection
Elke omleiding zal worden gevolgd (bijv. Http naar https) dit kan ook worden gewijzigd:
foo = post('http://httpbin.org/post', data = {'key':'value'}, allow_redirects=False)
Als de nabewerking is omgeleid, is deze waarde toegankelijk:
print(foo.url)
Een volledige geschiedenis van omleidingen kan worden bekeken:
print(foo.history)
Formulier gecodeerde gegevens
from requests import post
payload = {'key1' : 'value1',
'key2' : 'value2'
}
foo = post('http://httpbin.org/post', data=payload)
Om formuliergecodeerde gegevens met de post-bewerking door te geven, moeten gegevens worden gestructureerd als woordenboek en worden aangeleverd als de gegevensparameter.
Als de gegevens niet gecodeerd willen zijn, geeft u eenvoudig een string of een geheel getal door aan de parameter data.
Geef het woordenboek op in de json-parameter voor Verzoeken om de gegevens automatisch te formatteren:
from requests import post
payload = {'key1' : 'value1', 'key2' : 'value2'}
foo = post('http://httpbin.org/post', json=payload)
Bestand upload
Met de module Verzoeken is het alleen nodig om een bestandsingang te bieden in tegenstelling tot de inhoud die wordt opgehaald met .read()
:
from requests import post
files = {'file' : open('data.txt', 'rb')}
foo = post('http://http.org/post', files=files)
Bestandsnaam, content_type en headers kunnen ook worden ingesteld:
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
foo = requests.post('http://httpbin.org/post', files=files)
Tekenreeksen kunnen ook worden verzonden als een bestand, zolang ze worden geleverd als de parameter files
.
Meerdere bestanden
Meerdere bestanden kunnen op vrijwel dezelfde manier worden aangeleverd als één bestand:
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)
Antwoorden
Reactiecodes kunnen worden bekeken vanaf een post-operatie:
from requests import post
foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.status_code)
Geretourneerde gegevens
Toegang tot gegevens die worden geretourneerd:
foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.text)
Ruwe reacties
In de gevallen waarin u toegang moet krijgen tot het onderliggende urllib3-antwoord.HTTPResponse-object, kan dit door het volgende te doen:
foo = post('http://httpbin.org/post', data={'data' : 'value'})
res = foo.raw
print(res.read())
authenticatie
Eenvoudige HTTP-authenticatie
Eenvoudige HTTP-authenticatie kan worden bereikt met het volgende:
from requests import post
foo = post('http://natas0.natas.labs.overthewire.org', auth=('natas0', 'natas0'))
Dit is technisch korte hand voor het volgende:
from requests import post
from requests.auth import HTTPBasicAuth
foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPBasicAuth('natas0', 'natas0'))
HTTP Digest Authentication
HTTP Digest Authentication gebeurt op een zeer vergelijkbare manier, Requests biedt hiervoor een ander object:
from requests import post
from requests.auth import HTTPDigestAuth
foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPDigestAuth('natas0', 'natas0'))
Aangepaste authenticatie
In sommige gevallen zijn de ingebouwde authenticatiemechanismen mogelijk niet voldoende, stel je dit voorbeeld voor:
Een server is geconfigureerd om authenticatie te accepteren als de afzender de juiste user-agent string, een bepaalde headerwaarde heeft en de juiste referenties levert via HTTP Basic Authentication. Om dit te bereiken, moet een aangepaste verificatieklasse worden voorbereid, met subklasse AuthBase, die de basis vormt voor Verzoeken-authenticatie-implementaties:
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
Dit kan vervolgens worden gebruikt met de volgende code:
foo = get('http://test.com/admin', auth=CustomAuth('SecretHeader', 'CustomUserAgent', 'user', 'password' ))
volmachten
Elke POST-aanvraagverzoek kan worden geconfigureerd om netwerkproxy's te gebruiken
HTTP / S-proxy'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)
HTTP Basic Authentication kan op deze manier worden geleverd:
proxies = {'http': 'http://user:[email protected]:312'}
foo = requests.post('http://httpbin.org/post', proxies=proxies)
SOKKEN Volmachten
Het gebruik van sokkenproxy's vereist requests[socks]
afhankelijkheden van derden requests[socks]
, nadat geïnstalleerde sokkenproxy's op een zeer vergelijkbare manier worden gebruikt als HTTPBasicAuth:
proxies = {
'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port'
}
foo = requests.post('http://httpbin.org/post', proxies=proxies)