Python Requests Quick Reference
===============================

INSTALLATION
  pip install requests

BASIC REQUESTS
  import requests

  r = requests.get(url)
  r = requests.post(url, data={"key": "val"})
  r = requests.put(url, json={"key": "val"})
  r = requests.delete(url)
  r = requests.head(url)
  r = requests.options(url)

RESPONSE
  r.status_code            HTTP status code
  r.text                   Response body (str)
  r.content                Response body (bytes)
  r.json()                 Parse JSON response
  r.headers                Response headers
  r.cookies                Response cookies
  r.url                    Final URL (after redirects)
  r.elapsed                Time elapsed
  r.history                Redirect history

PARAMETERS
  # URL parameters
  r = requests.get(url, params={"q": "search"})

  # Headers
  r = requests.get(url, headers={"Authorization": "Bearer tok"})

  # Cookies
  r = requests.get(url, cookies={"session": "abc"})

  # POST data (form-encoded)
  r = requests.post(url, data={"user": "admin"})

  # POST JSON
  r = requests.post(url, json={"user": "admin"})

  # File upload
  r = requests.post(url, files={"file": open("f", "rb")})

  # Timeout
  r = requests.get(url, timeout=5)

  # Disable SSL verification
  r = requests.get(url, verify=False)

  # Follow redirects
  r = requests.get(url, allow_redirects=False)

  # Proxy
  r = requests.get(url, proxies={"http": "http://127.0.0.1:8080"})

SESSIONS (persist cookies, headers)
  s = requests.Session()
  s.headers.update({"Authorization": "Bearer tok"})
  s.get(url)              # cookies persist
  s.post(url, data=data)  # same session

AUTH
  from requests.auth import HTTPBasicAuth
  r = requests.get(url, auth=HTTPBasicAuth("user", "pass"))
  # shorthand:
  r = requests.get(url, auth=("user", "pass"))

CTF PATTERNS
  # SQL injection test
  r = requests.get(url, params={"id": "1' OR '1'='1"})

  # Cookie manipulation
  r = requests.get(url, cookies={"admin": "true"})

  # Brute force
  for word in open("wordlist.txt"):
      r = requests.post(url, data={"pass": word.strip()})
      if "Success" in r.text:
          print(f"Found: {word}")
          break
