Python: Requests для подрастающих

*для подрастающих потому что подзаело обилие материала «для новичков, для начинающих», когда продолжать то будем!?

Но для порядка, начнем с нуля 🙂

Делаем в своей консоли pip install requests

Начинаем свой скрипт с import requests

Вот и все что нужно, чтобы быть успешным хацкером, я не шучу.

Ну еще понадобится умение открывать Chrome DevTools (F12 or Ctrl+Shift + I )

Не буду резко высказываться про urllib но сам лично не использую эту http библиотеку в принципе

Для отработки своих навыков мы не станем (в отличие от прочих даунских уроков) опрашивать google.com

Для http запросов есть крутой echo сервис http://httpbin.org/ , который идеально подойдет, т.к. обладает всеми необходимыми endpoints:

http://httpbin.org/get вернет нам инфу

http://httpbin.org/post примет инфу

и еще всевозможные, извращаться можно долго, но это собсна основные

Для подсветки синтаксиса, код буду заливать скринами, исходники принципиально не оставляю, т.к. здесь пара строк и многие со мной согласятся: написанное руками в разы качественнее оседает на мозге, нежели чем копипаст.

Intro:

Результатом выполнения запросов является объект класса ‘requests.models.Response’, имеющий такие полезные для нас методы, как:

  • text — результат выполнения запроса в формате строки
  • content — результат выполнения запроса в сыром виде бинарной строки
  • status_code — код выполненного HTTP запроса
  • headers — заголовки
  • cookie — ну вы поняли

GET

Поясни за код:

— импорт библиотеки

— импорт метода, который «склеивает» части URL в один

— строковая переменная, содержащая адрес сервиса, к которому делаем запрос

— выполнение самого запроса

— вывод в консоль результата (то, что мы получили GET’ом)

Output:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.1"
  }, 
  "origin": "ваш внешний IP", 
  "url": "http://httpbin.org/get"
}

Полученный результат вы можете, например, загрузить в json.loads(r.text) чтобы использовать навигацию по словарю:

Вот вам, кстати, готовый скриптос, чтобы узнать свой внешний IP.

(настоятельно рекомендую при работе со словарями использовать именно конструкцию dictionary_name.get(key) вместо обычного dictionary_name[key]. Это позволит вам избежать лишних Exception, ибо во втором варианте ваш скрипт упадет, если ключа в словаре не будет, в то время как первый варик возвращает в таком случае по умолчанию None или любое другое значение, которое вы можете передать вторым параметром)

А если вы работаете не с JSON, а HTML, то r.text запыхываем в BeautifulSoup для парсинга страницы.

Быдлокод:

Минусы:

— хардкод ссылки (адрес сервиса придется менять не в одном месте, а везде)

— результат не сохранен (не проверить код статуса, заголовки и прочее)

POST

Поясни за код:

— все тоже самое, но теперь мы используем requests.post и передаем параметром data=payload наши данные. Обычно именно так происходит процесс авторизации на ресурсе — отправляются введенные вами в форму данные на какой-нибудь http://resource.name/login

Output:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "password": "harry_and_malfoy_pvp", 
    "username": "askdevops"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "close", 
    "Content-Length": "48", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.1"
  }, 
  "json": null, 
  "origin": "ваш ипишник", 
  "url": "http://httpbin.org/post"
}

На закуску:

Запрашиваемая вами через GET страница может быть недоступна без авторизации

В случае BaseAuth это решается так

Outro:

В начале я про режим разработчика в браузере сказал. Это, разумеется, нужно для выяснения, какие линки нужно дергать, на какие endpoint кидать payload чтобы авторизоваться, заполнить форму и все такое. + периодически приходится смотреть код страниц, чтобы разобраться что там нахуевертили эти фронтендеры и как нам вообще теперь разъебывать эти сайты своими скриптами.

Если соберусь, то в некст выпуске поговорим про сессии, более сложную авторизацию, заголовки, печенье и еще что-нибудь.

AskDevops —> https://t.me/ithangouts

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

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