Рубрики
Без рубрики

Автоматизация представлений HTTP с использованием Python и Cronjobs

Никто не любит выполнять утомительные и повторяющиеся задачи. Я получил электронное письмо, уведомив меня, что мне нужно было подготовить … с меткой HTTP, Cronjobs, Python, Linux.

Никто не любит выполнять утомительные и повторяющиеся задачи. Я получил электронное письмо, уведомив мне, что мне нужно было отправлять ежедневную «проверку декларации здоровья» в качестве формы на веб -сайте, прежде чем играть в мои любимые слоты на https://gamblersarea.com/ Анкет Поскольку я веду скучный и обычный образ жизни, я подумал, что автоматизирую эту задачу. Было бы хорошим оправданием, чтобы обновить мои знания по модулю запросов Python, а также получить больше опыта работы с рабочих мест Cron.

Используя встроенные инструменты Firefox Dev, мы видим, что веб-форма состоит из довольно стандартной теги HTML-формы, отправленной через запрос HTTP POST. Веб -трафик движется в запросах и ответах.

HTTP -запросы отправляются хостами (ваш браузер или компьютер) для конкретных веб -ресурсов, на которые затем отвечают ответы HTTP, которые предоставляют запрошенный веб -ресурс.

Запросы поставляются в нескольких ароматах, но наиболее распространенными запросами являются запросы на получение запросов и публикации. Получить запросы – это http -запросы, обычно отправляемые для «получить» или получить информацию из Интернета, в то время как запросы на почту используются для отправки или «публикации» данных в Интернет (это может добавить сообщение в блоге, делать комментарий в социальных сетях или в Наш случай, отправив веб -форму) Запросы публикации разделены на 2 секции, называемые головой, которые содержат заголовки, и тело. Для этого конкретного запроса заголовок занимает первые 15 строк запроса, и тело нашего запроса начинается на линии 17.

Мы можем видеть, где каждое из полей в форме соответствует полям в строке 17 запроса. Таким образом, мы можем написать какой -то код для изменения содержимого, представленного в строке 17 в зависимости от дня недели и где я буду в тот день.

Теперь, когда у нас есть некоторое представление о том, как выглядит действительный HTTP -запрос и соответствующий ответ, мы можем использовать Python и его модуль запроса для создания и отправить наш собственный запрос HTTP Post, чтобы помочь нам автоматически.

#!/usr/bin/python3

import requests
import datetime


URL = "https://some-endpoint/somewhere/admin-ajax.php"

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0',
    'accept': 'application/json, text/javascript, */*; q=0.01',
    'accept-language': 'en-US,en;q=0.5',
    'accept-encoding': 'gzip, deflate',
    'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'x-requested-with': 'XMLHttpRequest',
    'content-length':'661',
    'origin': 'https://some.origin.com',
    'DNT': '1',
    'Connection': 'close',
    'cookie': 'TawkConnectionTime=0',
    'sec-gpc': '1'
}

usual_places = {
    "home": "Home",
    0: "Era",
    1: "Past",
    2: "Cashflow",
    3: "Dreams-of-flight",
    4: "Stallion-Cooper-Coffee",
    5: "Ministop"
}

url_encoded_comma = '%2C'


day = datetime.datetime.today().day
if (day < 10):
  day = '0'+str(day)
else:
    day = str(day)

month = datetime.datetime.today().month
if (month < 10):
  month = '0'+str(month)
else:
    month = str(month)

home = usual_places['home']
places = usual_places[4]+url_encoded_comma+'+'+usual_places[5]


data = "action=formcraft3_form_submit&field1%5B%5D=T%E1%BB%9C+KHAI+Y+T%E1%BA%BE+H%C3%80NG+NG%C3%80Y%2F+DAILY+HEALTH+DECLARATION+FORM+2021&field19=&field3%5B%5D=Avery+Tan&field20=+&field14="+day+"%2F"+month+"%2F2021&field6%5B%5D=B%C3%ACnh+th%C6%B0%E1%BB%9Dng%2FNormal&field25%5B%5D=&field9%5B%5D="+places+"&field21="+home+"&field30%5B%5D=Kh%C3%A1c%2FOthers&field32%5B%5D=&field33%5B%5D=&field34%5B%5D=&field35%5B%5D=&field36%5B%5D=I+use+Grab&field18%5B%5D=I+agree&field28=&website=&id=51&location=https%3A%2F%2F%2F%2F&emails=&hidden=field25, field32, field33, field34, field35&redirect=&type=all&triggerIntegration=undefined"


r = requests.post(url = URL, headers = headers, data = data)


# for logging
time_now = str(datetime.datetime.now())

print(time_now + '.  Request sent. Response is ' + r.text+ '\n\n')
f = open('/home/kali/Documents/health-automated/health-logs','a+')
f.write(time_now + '.  Request sent. Response is ' + r.text+ '\n\n')
f.close()

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

Я выполняю некоторую логику, чтобы гарантировать, что дата представлена в формате, который ожидает форма.

Наконец, я добавляю эти переменные в свою строку данных, которая будет сформировать тело нашего запроса POST, прежде чем наконец отправить запрос.

Теперь, когда у нас есть наш простой сценарий Python, теперь нам нужно запланировать

Работа Cron-это планировщик заданий на основе Unix, где пользователи могут настроить

Чтобы запланированный Cronjob запустился в установленное время, компьютер должен работать и подключаться к Интернету во время запланированного задания для выполнения его. Вместо того, чтобы запускать Cronjob с моего ноутбука и убедиться, что он включен и подключен в запланированное время выполнения, я собираюсь использовать Deth* (произносится Deathstar), мой сервер Raspberry Pi 4, который я подключил к задней части телевизор в моей комнате. Это машина Kali, которую я использую для легких, подробных, тщательных сканирований, оставляя мой ноутбук, работающий в течение 8 часов, не является вариантом.

Я использую DataPlicity, которая предлагает VPN-подобную услугу для удаленного подключения к вашему Raspberry Pi без необходимости настраивать порт вперед или иметь дело с любыми динамическими службами DNS. Используя DataPlicity, я могу удаленно получить доступ к Deth*, где бы у меня был интернет.

Cronjobs может быть запланировано на основе каждого пользователя через то, что называется Crontab. Чтобы получить доступ к конкретному пользователю Crontab, мы делаем это через

crontab -e

Синтаксис команды Cronjob представляет собой 5 дополнительных параметров, за которыми следуют команда, которую вы хотите запустить в указанное время. Я управляю своим Cronjob в начале 50 -й минуты 2 -го часа дня или в 02 50 UTC, которое составляет около 9,50 утра по местному времени.

Я также перенаправляю выход из файла Python в журналы, чтобы периодически проверять, чтобы убедиться, что Cronjob работает как ожидалось.

При этом я могу легко отдохнуть, зная, что мои формы отправляются в автоматизированном невнимательном невнимательном манере!

Следи за мной на Твиттере: @vis1na

Оригинал: “https://dev.to/fusleor/automating-http-form-submissions-using-python-and-cronjobs-3o6c”