January 12, 2024

упрощаем себе разработку с помощью postman

всем привки, я - kemen, python-dev, хочу поделиться с вами, как можно значительно ускорить и облегчить себе разработку софта для автоматизации сайта.


postman - с первого взгляда, недооцененная тулза, очень удобная для работы с api.

В нем можно:

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

быстренько разберем и настроим себе интерфейс для работы.

интерфейс

  1. Собственно, рабочая область, в которой вы можете редактировать свой запрос:
    • query параметры;
    • headers;
    • body;
    • Response - полученный ответ и его status code;
  2. Основное меню;
  3. Боковая панель, в которой можно:
    • cоздать коллекцию запросов (как бы разделить их и сгруппировать в отдельные файлы);
    • создавать новые окружения с индивидуальными настройками;
  4. Выбор типа запроса и сам URL.

Возьмем для примера сайтик - Tabi.

Создаем себе папочку, вместо New Collection - tabi.

добавляем новый request

а теперь самый сок, залетаем на страницу tabi.lol, открываем консольку разработчика
во вкладке Network видим все запросики

подключаем кошелек и видим, что появился запрос login, он то, нам и нужен
копируем его, как cURL

теперь залетаем в postman и вставляем наш запрос

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

body
response - body

уже очень удобно, но на этом не останавливаемся, открываем code

выбираем нужный нам язык - в моем случае Python

получаем уже почти готовый код!!!

проведя анализ, понимаем, что нам нужно генерировать сигнатуру самим:

async def get_signature(self):
    # генерируем user-agent
    ua = self.new_ua()
    now = datetime.now()
    timestamp = int(datetime.timestamp(now))
    message = (
    f"Hi! Welcome to Tabi."
    f"\n\nPlease sign the message to let us know that you own the wallet."
    f"\n\nSigning is gas-less and will not give Tabi permission to conduct"
    f" any transactions with your wallet."
    f"\n\nTime stamp is {timestamp}.")
    
    while True:
        try:
           msg = encode_defunct(text=message)
           sign = self.w3.eth.account.sign_message(msg, self.privatekey)
           signature = self.w3.to_hex(sign.signature)
           json_data = {
               'publicKey': self.address,
               'signedMessage': signature,
           }
           return signature, ua, timestamp
         except Exception as er:
           logger.error(f'{self.address}: - {er}')
           await asyncio.sleep(5)

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

async def login(self):
    signature, ua, timestamp = await self.get_signature()
    headers = {
        'authority': 'api.tabi.lol',
        'accept': 'application/json, text/plain, */*',
        'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
        'content-type': 'application/json',
        'origin': 'https://tabi.lol',
        'referer': 'https://tabi.lol',
        'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-site',
        'user-agent': ua,
    }
    json_data = {
        'chain_id': 56,
        'wallet_address': self.address.lower(),
        'signature': signature[2:],
        'timestamp': timestamp
    }
    while True:
        try:
            async with aiohttp.ClientSession() as session:
                async with session.post('https://api.tabi.lol/v3/login',
                json=json_data, headers=headers, proxy=self.proxy) as response:
                   if response.status == 200:
                       token = (json.loads(await response.text()))['data']['access_token']
                       headers['authorization'] = f'Bearer {token}'
                       return headers, ua
        except Exception as er:
            logger.error(f'{self.address}: - {er}')
            await asyncio.sleep(5)

вот, ребятки, вы научились с помощью postman'a писать запросики к сайту!
я советую собирать все нужные запросы в папку, в postman'e, а уже после писать весь код.
надеюсь, теперь вы значительно быстрее будете писать код!

всех обнял, лфг, больше контента - https://t.me/kemencryptocode