Requests (Python)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Python kent diverse bibliotheken om een webclient te emuleren. Requests lijkt de populairste te zijn (zomer 2019).

GET, POST, PUT

GET en POST zijn de twee meestvoorkomende. PUT is een stuk zeldzamer, net als de overige requests (die hier niet behandeld worden).

GET

GET: Request a resource from a server. Argument: An URL

POST

POST: Sent data to a server to create/update a resource. Als je Terug klikt binnen een browser, en deze waarschuwt je, dat je iets opnieuw submit, dan betreft het een POST-request

PUT

PUT: Broertje van POST, maar dan idempotent: Als je hetzelfde PUT-commando meerdere keren uitvoert, verandert het resultaat niet. Als je een POST-commando herhaalt, creëer je additionele resources/updates.

Inloggen op een afgeschermde pagina

Dat gaat met requests verbazend simpel. Sterker nog: Het eerste voorbeeld op de home page demonstreet dit:

>>> r = requests.get('http://example.strompf.com', auth=('xxx','yyy'))
>>> r.status_code
200
>>> r.headers
{'Content-language': 'en', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Vary': 'Accept-Encoding,Cookie', 'X-Powered-By': 'PHP/5.5.9-1ubuntu4.27', 'Date': 'Fri, 02 Aug 2019 12:14:12 GMT', 'Cache-Control': 'private, must-revalidate, max-age=0', 'Server': 'Apache/2.4.7 (Ubuntu)', 'Content-Type': 'text/html; charset=UTF-8', 'Content-Encoding': 'gzip', 'Keep-Alive': 'timeout=5, max=49', 'Connection': 'Keep-Alive', 'Content-Length': '32237', 'Last-Modified': 'Fri, 02 Aug 2019 10:03:24 GMT'}
>>> r.headers['content-type']
'text/html; charset=UTF-8'
>>> r.encoding
'UTF-8'
>>> r.text
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n<html lang="en" dir="ltr">\n<head>\n<title>Main Page - Example</title>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n<meta name="generator" content="MediaWiki 1.16.4" />\n<link rel="alternate" type="application/x-wiki" title="Edit" href="/index.php?title=Main_Page&action=edit" />\n<link rel="edit" title="Edit" href="/index.php?title=Main_Page&action=edit" />\n<link rel="shortcut icon" href="/favicon.ico" />\n<link rel="search" type="application/opensearchdescription+xml" href="/opensearch_desc.php" title="Example (en)" />\n<link rel="alternate" type="a

Ter verificatie

#! /usr/bin/python3
#
# Experiments with requests
###################################################################
#
#
import requests

print(">>> Login zonder credentials...")
r = requests.get('http://example.strompf.com')
print(r.status_code)

print(">>> Login met correcte credentials...")
r = requests.get('http://example.strompf.com', auth=('xxx','correcte wachtwoord'))
print(r.status_code)

print(">>> Login met incorrecte credentials...")
r = requests.get('http://example.strompf.com', auth=('xxx','Verkeerde wachtwoord'))
print(r.status_code)

Uitvoer:

>>> Login zonder credentials...
401
>>> Login met correcte credentials...
200
>>> Login met incorrecte credentials...
401

P.s.: Handjevol HTTP Status-codes:

  • 200: OK
  • 301: Moved Permanently
  • 307: Temporary Redirected
  • 400: Bad Request
  • 401: Unauthorized
  • 403: Forbidden - Ik geloof dat je dit krijgt als je Google Search probeert te scrapen
  • 404: Not found
  • 504: Gateway Timeout - Krijg ik regelmatig op https://couchsurfing.com