Справочник Python

Полное руководство по языку на русском

Работа с сетью

Модуль requests

Стандартный HTTP-клиент. Установка: pip install requests

import requests  # импорт модуля регулярных выражений

# GET-запрос
response = requests.get("https://api.github.com")  # безопасный доступ со значением по умолчанию
print(response.status_code)  # 200
print(response.json())       # JSON-ответ
print(response.text)  # вывод в консоль
print(response.headers)  # вывод в консоль

# Параметры
params = {"q": "python", "page": 1}  # инициализация словаря
response = requests.get("https://api.github.com/search", params=params)  # безопасный доступ со значением по умолчанию

# POST с JSON
response = requests.post(  # POST-запрос
    "https://api.example.com/users",
    json={"name": "Анна", "age": 30},  # инициализация словаря
    headers={"Authorization": "Bearer token"}  # инициализация словаря
)

# POST с формой
response = requests.post("https://httpbin.org/post", data={"key": "value"})  # POST-запрос

Обработка ответов

import requests  # импорт модуля регулярных выражений

response = requests.get("https://httpbin.org/status/404")  # безопасный доступ со значением по умолчанию

if response.ok:            # True для 2xx
    data = response.json()  # десериализация JSON-ответа
elif response.status_code == 404:  # иначе если
    print("Не найдено")  # вывод в консоль
elif response.status_code >= 500:  # иначе если
    print("Ошибка сервера")  # вывод в консоль

# Исключения
try:  # начало блока с обработкой исключений
    response = requests.get("https://example.com", timeout=5)  # безопасный доступ со значением по умолчанию
    response.raise_for_status()  # проверка HTTP-статуса на ошибку
except requests.Timeout:  # обработка исключения
    print("Таймаут")  # вывод в консоль
except requests.ConnectionError:  # обработка исключения
    print("Ошибка соединения")  # вывод в консоль
except requests.HTTPError:  # обработка исключения
    print(f"HTTP {response.status_code}")  # вывод в консоль

Сессии

session = requests.Session()  # создание HTTP-сессии
session.headers.update({"Authorization": "Bearer token"})  # обновление из другого словаря

# Куки сохраняются между запросами
session.get("https://httpbin.org/cookies/set/test/true")  # безопасный доступ со значением по умолчанию
response = session.get("https://httpbin.org/cookies")  # безопасный доступ со значением по умолчанию

# Закрытие сессии
session.close()  # закрытие сессии

# Контекстный менеджер
with requests.Session() as session:  # контекстный менеджер
    session.get("https://example.com")  # безопасный доступ со значением по умолчанию

urllib — стандартная библиотека

from urllib.request import urlopen  # импорт модуля
from urllib.parse import urlencode, quote  # импорт модуля

# Простой GET
with urlopen("https://api.github.com") as f:  # контекстный менеджер
    data = f.read().decode()  # декодирование из байтов
    print(f.status)  # 200

# Параметры
params = urlencode({"q": "python", "page": 1})  # присваивание
url = f"https://api.github.com/search?{params}"  # присваивание

# Кодирование URL
quote("привет мир")  # %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80

Сокеты (низкий уровень)

import socket  # импорт модуля сокетов

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # создание сокета
sock.connect(("example.com", 80))
sock.send(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
response = sock.recv(4096)  # присваивание
sock.close()

# TCP-сервер
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # создание сокета
server.bind(("localhost", 8080))
server.listen(1)

conn, addr = server.accept()
data = conn.recv(1024)  # присваивание
conn.send(b"OK")
conn.close()  # закрытие соединения