Работа с сетью
Модуль 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() # закрытие соединения