Requests в python. Примеры выполнения http запросов
Сегодня мы будет изучать одну из самых больших библиотек питона: request. Она позволяет делать HTTP запросы на сторонние сервера, получать от них данные и впоследствии их обрабатывать. С помощью API можно узнать погоду, узнать результаты футбольных (и не только) матчей и многое другое. Библиотека довольно трудная, поэтому соберитесь и погнали!
Краткий обзор запросов HTTP
Данные запросы лежат в основе интернета. Пользователь при помощи HTTP отправлять запросы на сервер, тот их обрабатывает и выдает результат в браузер.
Отправляя запросы, пользователь указывает каким образом его надо обработать. Самые популярные методы запросы: GET, POST, PUT. GET нужен, чтобы прочитать информацию, а POST и PUT, чтобы добавить новую или изменить существующую.
Установка Python Requests
Данная библиотека не входит в стандартный пакет библиотек пайтона и ее нужно установить отдельно с помощью pip. Нужно ввести в терминале следующую команду без кавычек: «pip install requests».
Requests метод GET
Теперь давайте использую GET дадим свой первый первый запрос. Для того, чтобы это сделать необходимо прописать request.get(), и в скобках ссылку на сайт. Только сначала нужно не забыть импортировать библиотеку в файл.
import request
requests.get(‘https://api.github.com’)
И если процесс прошел успешно, то нам выведется код 200. Давайте узнаем подробнее про коды состояния.
Коды состояния
Существую большое множество кодов, которые показывают состояние того или иного запроса. К примеру, рассмотрим следующий код:
answer = requests.get(‘https://api.github.com’)
answer.status_code => 200
Для того, чтобы узнать код состояния можно воспользоваться .status_code, который и выдаст эту информацию.
200 — означает, что все прошло удачно.
404 — означает, что требуемый ресурс не был найден.
Получить содержимое страницы в Requests
Ответы на запросы в большинстве случаев содержат очень важную информацию, которая находится в теле сообщения. Ее можно вывести в различных форматах.
.content позволяет получить содержимое запроса в байтах. Чтобы получить строку нужно использовать .text.
Для того, чтобы декодировать байты в строку нужно указать encoding, ибо по умолчанию request ориентируется на заголовки HTTP.
>> response.text
‘{«current_user_url»:»https://api.github.com/user»,»current_user_authorizations_html_url»:»https://github.com/settings/connections/applications{/client_id}»,»authorizations_url»:»https://api.github.com/authorizations»,»code_search_url»:»https://api.github.com/search/code?q={query}{&page,per_page,sort,order}»,»commit_search_url»:»https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}»,»emails_url»:»https://api.github.com/user/emails»,»emojis_url»:»https://api.github.com/emojis»,»events_url»:»https://api.github.com/events»,»feeds_url»:»https://api.github.com/feeds»,»followers_url»:»https://api.github.com/user/followers»,»following_url»:»https://api.github.com/user/following{/target}»,»gists_url»:»https://api.github.com/gists{/gist_id}»,»hub_url»:»https://api.github.com/hub»,»issue_search_url»:»https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}»,»issues_url»:»https://api.github.com/issues»,»keys_url»:»https://api.github.com/user/keys»,»notifications_url»:»https://api.github.com/notifications»,»organization_repositories_url»:»https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}»,»organization_url»:»https://api.github.com/orgs/{org}»,»public_gists_url»:»https://api.github.com/gists/public»,»rate_limit_url»:»https://api.github.com/rate_limit»,»repository_url»:»https://api.github.com/repos/{owner}/{repo}»,»repository_search_url»:»https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}»,»current_user_repositories_url»:»https://api.github.com/user/repos{?type,page,per_page,sort}»,»starred_url»:»https://api.github.com/user/starred{/owner}{/repo}»,»starred_gists_url»:»https://api.github.com/gists/starred»,»team_url»:»https://api.github.com/teams»,»user_url»:»https://api.github.com/users/}’
Примеры HTTP методов в Requests
Помимо GET и POST есть еще много других методов:
>> requests.post(‘https://httpbin.org/post’, data={‘key’:’value’})
>>> requests.put(‘https://httpbin.org/put’, data={‘key’:’value’})
>>> requests.delete(‘https://httpbin.org/delete’)
>>> requests.head(‘https://httpbin.org/get’)
>>> requests.patch(‘https://httpbin.org/patch’, data={‘key’:’value’})
>>> requests.options(‘https://httpbin.org/get’)
Cookies
Request также дает нам возможность быстро получать доступ к куки.
>> url = ‘https://example.com/some/cookie/setting/url’
>>> r = requests.get(url)
>>> r.cookies[‘example_cookie_name’]
Для того, чтобы посылать свои куки на сервер необходимо использовать параметр cookies.
>> r = requests.get(url, cookies=cookies)
Куки возвращают ответ в RequestsCookieJar, который работает примерно так же, как и словарь.
Использование Translate API
Теперь давайте вместе попробуем поработать с API яндекс переводчика. Вам необходимо перейти по ссылке — https://tech.yandex.com/translate/ — и создать ключ API. Далее записываем свой ключ в переменную, а лучше в константу.
Это нужно для того, чтобы яндекс мог проводить аутентификацию каждый раз, когда мы пытаемся к нему обратиться. Далее нам нужно выяснить какую информацию требует яндекс, чтобы перевести наш текст. Для этого надо перейти в их документацию: https://yandex.com/dev/translate/doc/dg/reference/translate.html
Там мы выясним, что необходимые параметры следующие: key, text и lang. Теперь давайте добавим код на этот URL. Напишем следующий код:
url = ‘https://translate.yandex.net/api/v1.5/tr.json/translate’
res = requests.get(url)
Теперь можем отправлять текст.
params = dict(key=[тут надо ввести свой апи ключ], text=’Hello’, lang=’en-es’)
res = requests.get(url, params=params)
И вам выдастся ответ.
Ошибки Translate API
Если вы попробуете изменить свой апи ключ, то естественно получите ошибку. Даже не именно апи ключ, а если хоть где-нибудь совершите маленькую ошибку, то скорее всего ничего работать не будет. Поэтому рекомендуется делать следующее:
print(res.status_code)
Нужно вписывать этот код и он вам выдаст успешно ли ваша отправка на сервер или нет.
Отправим сообщение в WhatsApp
Теперь давайте поближе познакомимся с методом post, который так же является очень часто используемым, и с его помощью попробуем отправить сообщение другу на ватсап.
Для начала необходимо воспользоваться сервисом, который предоставляет доступ как API для отправки сообщений. В нашем примере мы воспользуемся этим: https://chat-api.com/ru/demo.html . Хотя сервис и платный, но у него есть пробный режим 3 дня. Этого нам хватит.
После регистрации мы получим все необходимое. Далее прописываем следующий код:
import requests
url = ‘<Ваш API URL>/message?token=<Ваш токен>’
ata = {«phone»: «<номер телефона>», «body»: «<cообщениe>»}
message = requests.post(url, json=data)
Далее рекомендую вам проверить удачно ли все прошло (print.message.text). И по идеи вам должен выдастся следующий ответ:
{«sent»:true,»message»:»<номер телефона адресата>@c.us»,»id»:»true_<номер телефона адресата>@c.us_3EB07324DCD36BD13CC4″,»queueNumber»:1}
Python Requests аутентификация HTTP AUTH
При помощи аутентификации сервер получает возможность понять кто вы есть. Он получает все необходимые данные о вас.
На GIthab есть Authenticated User API (https://python-scripts.com/requests#auth-requests-python), и он предоставляет все данные об аутентифицированном пользователе.
>> requests.get(‘https://api.github.com/user’, auth=(‘username’, getpass()))
Достаточно использовать такой код, чтобы передать запрос. И если все будет успешно, то выдастся код 200, а если же, к примеру, не будут указаны данные, то 401.
>> requests.get(‘https://api.github.com/user’)
Так же можно передавать данные,используя HTTPBasicAuth.
>>> requests.get(
… ‘https://api.github.com/user’,
… auth=HTTPBasicAuth(‘username’, getpass())
… )
Проверка знаний
Сегодня мы познакомились с очень не простой темой и теперь предлагаем вам пройти тест по полученным знанием, чтобы проверить как вы усвоили материал.
1. Какая библиотека позволяет работать с API?
a) request
b) response
c) API
d) HTTP
2. Какие существуют основные метода запроса?
3. Что обозначают соответственно коды состояние 200 и 404?
a) Ошибка и некорректный запрос
b) Все хорошо и сервис не доступен
c) Не найдено и сервис не доступен
d) Все хорошо и не найдено
4. Предоставляет ли request взаимодействовать с куки?
a) Да
b) Нет
5. request.ged(‘https://api.github.com’) — Найдите 2 ошибки в коде
Ну вот мы и подошли к концу. Надеюсь, теперь вы понимаете как работает эта библиотека и у вас не вызывет трудностей сделать какой-нибудь запрос на сервер и что-то получить. А если это так, то самое время попрактиковаться самим.Удачи!