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 ошибки в коде

Ну вот мы и подошли к концу. Надеюсь, теперь вы понимаете как работает эта библиотека и у вас не вызывет трудностей сделать какой-нибудь запрос на сервер и что-то получить. А если это так, то самое время попрактиковаться самим.Удачи!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *