logo

Запити GET і POST за допомогою Python

У цьому дописі обговорюються два методи запиту HTTP (протокол передачі гіпертексту) запити GET і POST у Python та їх реалізація в Python. 

Що таке HTTP?  

HTTP — це набір протоколів, призначених для забезпечення зв’язку між клієнтами та серверами. Він працює як протокол запит-відповідь між клієнтом і сервером. Веб-браузер може бути клієнтом, а програма на комп’ютері, на якому розміщено веб-сайт, може бути сервером. Отже, для запиту відповіді від сервера існує два способи:

  1. ОТРИМАТИ : для запиту даних із сервера.
  2. ПОСТ : для надсилання даних для обробки на сервер.

Ось проста схема, яка пояснює основну концепцію методів GET і POST.



Запити GET і POST за допомогою Python' src='//techcodeview.com/img/python/28/get-and-post-requests-using-python.webp' title= 

 Тепер потрібно зробити HTTP-запити Python ми можемо використовувати кілька бібліотек HTTP, наприклад:

Найелегантнішою і найпростішою з перерахованих вище бібліотек є Requests. У цій статті ми будемо використовувати бібліотеку запитів. Щоб завантажити та встановити бібліотеку запитів, скористайтеся такою командою:

pip install requests

Створення запиту Get

Наведений вище приклад знаходить широту, довготу та відформатовану адресу даного місця, надсилаючи запит GET до API Карт Google. Ан API (інтерфейс прикладного програмування) дає вам обмежений доступ до внутрішніх функцій програми. І в більшості випадків надані дані є JSON (нотація об’єктів JavaScript) формат (який реалізований як об’єкти словника в Python!).

Python
# importing the requests library import requests # api-endpoint URL = 'http://maps.googleapis.com/maps/api/geocode/json' # location given here location = 'delhi technological university' # defining a params dict for the parameters to be sent to the API PARAMS = {'address':location} # sending get request and saving the response as response object r = requests.get(url = URL params = PARAMS) # extracting data in json format data = r.json() # extracting latitude longitude and formatted address # of the first matching location latitude = data['results'][0]['geometry']['location']['lat'] longitude = data['results'][0]['geometry']['location']['lng'] formatted_address = data['results'][0]['formatted_address'] # printing the output print('Latitude:%snLongitude:%snFormatted Address:%s' %(latitude longitudeformatted_address)) 

Вихід:

Запити GET і POST за допомогою Python

Важливі моменти для висновку:

PARAMS = {'address':location}

URL-адреса запиту GET зазвичай містить деякі параметри. Для бібліотеки запитів параметри можуть бути визначені як словник. Пізніше ці параметри аналізуються та додаються до основної URL-адреси або кінцевої точки API. Щоб зрозуміти роль параметра, спробуйте надрукувати r.url після створення об’єкта відповіді. Ви побачите щось на зразок цього:

http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university

Це фактична URL-адреса, за якою зроблено запит GET

r = requests.get(url = URL params = PARAMS)

Тут ми створюємо об’єкт відповіді «r», який буде зберігати запит-відповідь. Ми використовуємо метод requests.get(), оскільки надсилаємо запит GET. Два аргументи, які ми передаємо, це URL-адреса та словник параметрів.

data = r.json()

Тепер, щоб отримати дані з об’єкта відповіді, нам потрібно перетворити необроблений вміст відповіді на структуру даних типу JSON. Це досягається за допомогою методу json(). Нарешті, ми витягуємо необхідну інформацію шляхом аналізу об’єкта типу JSON.

Створення POST-запиту

У цьому прикладі пояснюється, як вставити ваш вихідний_код до pastebin.com надіславши запит POST до PASTEBIN API. Перш за все вам потрібно буде створити ключ API за допомогою реєструючись тут а потім доступ до вашого Ключ API тут.  

Python
# importing the requests library import requests # defining the api-endpoint API_ENDPOINT = 'https://pastebin.com/api/api_post.php' # your API key here API_KEY = 'XXXXXXXXXXXXXXXXX' # your source code here source_code = ''' print('Hello world!') a = 1 b = 2 print(a + b) ''' # data to be sent to api data = {'api_dev_key': API_KEY 'api_option': 'paste' 'api_paste_code': source_code 'api_paste_format': 'python'} # sending post request and saving response as response object r = requests.post(url=API_ENDPOINT data=data) # extracting response text pastebin_url = r.text print('The pastebin URL is:%s' % pastebin_url) 

Важливі особливості цього коду:

data = {'api_dev_key':API_KEY  
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}

Тут знову нам потрібно буде передати деякі дані на сервер API. Ми зберігаємо ці дані як словник.

r = requests.post(url = API_ENDPOINT data = data)

Тут ми створюємо об’єкт відповіді «r», який буде зберігати запит-відповідь. Ми використовуємо метод requests.post(), оскільки ми надсилаємо запит POST. Два аргументи, які ми передаємо, це URL-адреса та словник даних.

pastebin_url = r.text

У відповідь сервер обробляє надіслані йому дані та надсилає pastebin_URL вашого вихідний_код до якого можна просто отримати доступ r.text.

запити.пост метод можна використовувати для багатьох інших завдань, а також для заповнення та надсилання веб-форм, розміщення на вашій шкалі часу FB за допомогою Facebook Graph API тощо. 

Ось кілька важливих моментів, над якими варто подумати:

  • Коли метод GET, усі дані форми кодуються в URL-адресу та додаються до дію URL як параметри рядка запиту. У формі POST дані з’являються в межах тіло повідомлення запиту HTTP.
  • У методі GET дані параметрів обмежені тим, що ми можемо додати в рядок запиту (URL). Найбезпечніше використовувати менше 2 КБ параметрів, деякі сервери обробляють до 64 КБ. Такої проблеми немає в методі POST, оскільки ми надсилаємо дані в тіло повідомлення запиту HTTP, а не URL-адреси.
  • Для надсилання даних у методі GET дозволено використовувати лише символи ASCII. У методі POST такого обмеження немає.
  • GET є менш безпечним порівняно з POST, тому що надіслані дані є частиною URL-адреси. Тому метод GET не слід використовувати під час надсилання паролів чи іншої конфіденційної інформації.
Створіть вікторину