🔶 Requests. Простий GET-запит.
У Python HTTP-запити можна робити вбудованою бібліотекою urllib.
Але значно зручніше використовувати сторонню бібліотеку requests. Варто також згадати інші бібліотеки зі схожим інтерфейсом — наприклад, httpx та curl_cffi. Вони можуть працювати асинхронно та мають більш наближені до браузерних TLS-відбитки, що зменшує ймовірність бану при скрапінгу.
Це простий приклад GET-запиту для отримання HTML-сторінки.
HTML-код виводиться в консоль як рядок і зберігається у файл у байтовому вигляді.
Для різних HTTP-методів є відповідні методи в requests. Додаткові дані можна передавати через аргументи методів (заголовки, параметри запиту, тіло, проксі тощо).
⚠️ Поширена помилка початківців — забути перевірити код відповіді сервера. Найпростіше це зробити викликом raise_for_status(), який підніме виняток, якщо код відповіді не в межах 200–399.
Але також можна перевіряти атрибут status_code.
#http #requests #GET
У Python HTTP-запити можна робити вбудованою бібліотекою urllib.
Але значно зручніше використовувати сторонню бібліотеку requests. Варто також згадати інші бібліотеки зі схожим інтерфейсом — наприклад, httpx та curl_cffi. Вони можуть працювати асинхронно та мають більш наближені до браузерних TLS-відбитки, що зменшує ймовірність бану при скрапінгу.
import requests
response = requests.get("https://example.com/")
response.raise_for_status()
print(response.text)
with open("content.html", "wb") as file:
file.write(response.content)
Це простий приклад GET-запиту для отримання HTML-сторінки.
HTML-код виводиться в консоль як рядок і зберігається у файл у байтовому вигляді.
Для різних HTTP-методів є відповідні методи в requests. Додаткові дані можна передавати через аргументи методів (заголовки, параметри запиту, тіло, проксі тощо).
⚠️ Поширена помилка початківців — забути перевірити код відповіді сервера. Найпростіше це зробити викликом raise_for_status(), який підніме виняток, якщо код відповіді не в межах 200–399.
Але також можна перевіряти атрибут status_code.
#http #requests #GET
👍4
🔷 Requests. GET з параметрами та заголовками.
Для прикладу виконаємо запит до погодного API
https://api.open-meteo.com/v1/forecast?latitude=50.4501&longitude=30.5234¤t_weather=True&timezone=Europe/Kyiv
Основні моменти:
1️⃣ Параметри запиту передаються у вигляді словника у метод, бібліотека кодує їх
2️⃣ Суто для демонстрації змінюємо заголовки запиту (User-Agent)
3️⃣ Об'єкт response має метод json який перетворює json-відповідь у python об'єкт (зазвичай словник)
#http #requests #GET
Для прикладу виконаємо запит до погодного API
https://api.open-meteo.com/v1/forecast?latitude=50.4501&longitude=30.5234¤t_weather=True&timezone=Europe/Kyiv
import requests
url = "https://api.open-meteo.com/v1/forecast"
params = {
"latitude": 50.4501,
"longitude": 30.5234,
"current_weather": True,
"timezone": "Europe/Kyiv"
}
headers = {
"User-Agent": "my-script/1.0",
}
response = requests.get(url, params=params, headers=headers)
response.raise_for_status()
json_content = response.json()
current_weather = json_content["current_weather"]
print("Температура в Києві:", current_weather["temperature"])
print("Швидкість вітру:", current_weather["windspeed"])
Основні моменти:
1️⃣ Параметри запиту передаються у вигляді словника у метод, бібліотека кодує їх
2️⃣ Суто для демонстрації змінюємо заголовки запиту (User-Agent)
3️⃣ Об'єкт response має метод json який перетворює json-відповідь у python об'єкт (зазвичай словник)
#http #requests #GET
👍3
🔶 Requests. POST form-urlencoded
POST використовується для створення ресурсів або надсилання даних на сервер. Дані передаються у тілі запиту, а не у URL (як при GET).
Є різні типи POST-запитів:
🔺 application/x-www-form-urlencoded – дані форми кодуються у вигляді
🔺 application/json – дані у вигляді json
🔺 multipart/form-data – форми з файлами.
Даний приклад демонструє передачу даних форми (form-urlencoded)
Бібліотека автоматично виставляє заголовок відповідно до типу:
Форми часто використовується для авторизації на сайтах: у даних передаються логін і пароль. Але у даному випадку ми передаємо текст і розмір картинки, а сайт повертає нам QR-код картинку.
#http #requests #POST
POST використовується для створення ресурсів або надсилання даних на сервер. Дані передаються у тілі запиту, а не у URL (як при GET).
Є різні типи POST-запитів:
🔺 application/x-www-form-urlencoded – дані форми кодуються у вигляді
param1=value1¶m2=value2🔺 application/json – дані у вигляді json
🔺 multipart/form-data – форми з файлами.
Даний приклад демонструє передачу даних форми (form-urlencoded)
Бібліотека автоматично виставляє заголовок відповідно до типу:
Content-Type: application/x-www-form-urlencoded Форми часто використовується для авторизації на сайтах: у даних передаються логін і пароль. Але у даному випадку ми передаємо текст і розмір картинки, а сайт повертає нам QR-код картинку.
import requests
url = "https://api.qrserver.com/v1/create-qr-code/"
data = {
"data": "Привіт світ!",
"size": "200x200"
}
response = requests.post(url, data=data)
response.raise_for_status()
with open("qr_code.png", "wb") as file:
file.write(response.content)
#http #requests #POST
👍2
🔷 Requests. POST application/json
POST/application-json використовується для надсилання json даних на сервер (REST API)
Замість параметру data треба використовувати параметр json
У цьому випадку бібліотека requests виставляє заголовок:
Реальне API мені не вдалось знайти тому використаємо для прикладу тестове API:
⚠️ Зверніть увагу що статус кодом який повертається може бути 201, а не 200 що відповідає створенню ресурсу.
Основні статус коди
#http #requests #POST
POST/application-json використовується для надсилання json даних на сервер (REST API)
Замість параметру data треба використовувати параметр json
У цьому випадку бібліотека requests виставляє заголовок:
Content-Type: application/jsonРеальне API мені не вдалось знайти тому використаємо для прикладу тестове API:
import requests
url = "https://jsonplaceholder.typicode.com/posts"
json_payload = {
"title": "foo",
"body": "bar",
"userId": 1
}
response = requests.post(url, json=json_payload)
response.raise_for_status()
print(response.status_code)
print(response.json())
201
{'title': 'foo', 'body': 'bar', 'userId': 1, 'id': 101}
⚠️ Зверніть увагу що статус кодом який повертається може бути 201, а не 200 що відповідає створенню ресурсу.
Основні статус коди
#http #requests #POST
👍1
🔶 Requests. POST multipart/form-data
multipart/form-data використовується у формах з надсилання файлів на сервер.
У цьому випадку бібліотека requests виставляє заголовок:
Для прикладу завантажимо наш qrcode з попереднього прикладу на файлообмінник.
Також будемо вдавати браузер Mozilla.
Для відправки файлів використовується словник files з вказанням:
1️⃣ назви файлу
2️⃣ самого файлу
3️⃣ типу файлу
#http #requests #POST
multipart/form-data використовується у формах з надсилання файлів на сервер.
У цьому випадку бібліотека requests виставляє заголовок:
Content-Type: multipart/form-data; boundary=...Для прикладу завантажимо наш qrcode з попереднього прикладу на файлообмінник.
Також будемо вдавати браузер Mozilla.
Для відправки файлів використовується словник files з вказанням:
1️⃣ назви файлу
2️⃣ самого файлу
3️⃣ типу файлу
import requests
with open("qr_code.png", "rb") as file:
url = "https://catbox.moe/user/api.php"
files = {
"fileToUpload": ("qr_code.png", file, "image/png"),
}
data = {
"reqtype": "fileupload",
"userhash": "",
}
headers = {
"User-Agent" : "Mozilla/5.0 "
"(Windows NT 10.0; Win64; x64; rv:142.0)"
"Gecko/20100101 Firefox/142.0"
}
r = requests.post(url, files=files, data=data, headers=headers)
r.raise_for_status()
print(r.text.strip()) # вивод url
https://files.catbox.moe/lmcc82.png
#http #requests #POST
👎1
🔷 Requests. Використання сесій.
У Python бібліотека requests дозволяє зручно працювати з HTTP-запитами. Якщо потрібно виконати кілька запитів до одного сайту — варто використовувати сесію.
Що дає використання сесії:
1️⃣ Автоматично підтримувати cookies між запитами.
2️⃣ Дозволяють повторно використовувати одні ті самі заголовки.
3️⃣ Використовують одне TCP-з’єднання для кількох запитів → запити виконуються швидше.
Приклад коду з використанням сесій:
#http #requests #session
У Python бібліотека requests дозволяє зручно працювати з HTTP-запитами. Якщо потрібно виконати кілька запитів до одного сайту — варто використовувати сесію.
Що дає використання сесії:
1️⃣ Автоматично підтримувати cookies між запитами.
2️⃣ Дозволяють повторно використовувати одні ті самі заголовки.
3️⃣ Використовують одне TCP-з’єднання для кількох запитів → запити виконуються швидше.
Приклад коду з використанням сесій:
import requests
url = "https://httpbin.org/headers"
with requests.Session() as session:
# Виставляємо заголовоки для всіх запитів у сесії
headers = {
"User-Agent" : "Mozilla/5.0 "
"(Windows NT 10.0; Win64; x64; rv:142.0)"
"Gecko/20100101 Firefox/142.0"
}
session.headers.update(headers)
r1 = session.get(url)
r1.raise_for_status()
print(r1.json())
r2 = session.get(url)
r2.raise_for_status()
print(r2.json())
#http #requests #session
👍1