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)


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow