Как обойти ошибку 405 Method Not Allowed с помощью HTTP POST?

Вопрос или проблема

Я пытаюсь сделать HTTP post на этом сайте:

https://www.colorado.gov/revenueonline/_/#2

(нажмите Verify a Sales Tax License в правом нижнем углу)

используя wget с следующей командой:

wget --post-data="VIEW__=CG_LicVer
&LASTFOCUSFIELD__=
&DOC_MORAL_ID__=0
&DvfmoUb__0_0_Fdr2ZH=7777777" \
-U "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" \
https://www.colorado.gov/revenueonline/_/#2

но он отклоняется с “ERROR 405: Method Not Allowed”, что, как я предполагаю, означает, что они вообще не разрешают HTTP посты на сайте. Но же код поста прямо там!

<form name="DocumentForm" class="DocumentForm " action="." method="post" onsubmit="return false;">

Короче говоря, как мне сделать пост или что бы ни использовал этот сайт, если он не использует http post или get, чтобы просто ввести номер и получить результаты следующей страницы?

Я считаю, что вы отправляете ваш POST на неправильный URL. Кажется, правильный URL это

https://www.colorado.gov/revenueonline/_/ImportDialog

Эта страница не возвращает 405. Однако я не уверен в ожидаемом результате.

Из вашего примера кода:

onsubmit="return false;"

Это означает, что HTML форма не будет отправлена браузером при нажатии кнопки. Вместо этого, вероятно, есть какой-то код JavaScript, который слушает нажатие кнопки и делает кастомный сетевой запрос.

Действительно, используя вкладку Network в DevTools, мы видим, что POST запрос делается на https://www.colorado.gov/revenueonline/_/EventOccurred, инициированный jQuery. В этом сетевом запросе есть несколько полей формы: Dd-5 и Dd-6, похоже, содержат имя пользователя и пароль соответственно.

Довольно часто HTML формы переопределяются JavaScript таким образом, поэтому лучше всего проверить фактический сетевой запрос с помощью DevTools, чтобы быть уверенным.

.

Ответ или решение

Ошибка HTTP 405 "Method Not Allowed" часто вызывает замешательство у пользователей, особенно когда они пытаются отправить POST-запрос на не поддерживаемый URL. Рассмотрим, как решать подобные проблемы, используя приведенную задачу как пример.

Теория

HTTP-ошибка 405 указывает на то, что метод запроса, указанный клиентом, не поддерживается сервером для целевого ресурса. Обычно это происходит, когда вы пытаетесь использовать неправильный HTTP-метод на определенном endpoint’е, например, POST вместо GET или DELETE на ресурсе, который поддерживает только другой метод.

Веб-формы в современных сайтах часто используют JavaScript для отправки данных. Это позволяет реализовать более сложную бизнес-логику при минимальной перезагрузке страницы и улучшенной работе с пользовательским интерфейсом. Такие формы могут ловить события, происходящие на клиентской стороне, и использовать AJAX для передачи данных на сервер, в отличие от стандартных HTTP-запросов.

Пример

Рассматриваемый случай касается сайта правительства Колорадо, где используется JavaScript для обработки форм. Вы упомянули, что форма имеет атрибут onsubmit="return false;". Это говорит о том, что стандартная отправка формы отключена, и вместо нее используются JavaScript-методы для отправки данных.

Другой пользователь заметил, что фактический запрос POST направляется на /EventOccurred посредством jQuery, что указывает на использование AJAX.

Применение

Для того чтобы обойти ошибку 405 и правильно отправить данные на сайт, выполните следующие шаги:

  1. Используйте DevTools для анализа сетевых запросов:

    • Откройте Chrome DevTools (или другой браузер с аналогичными средствами разработчика) и перейдите на нужную страницу.
    • В разделе "Сеть" (Network) проследите за запросами, отправляемыми при взаимодействии с формой.
    • Поищите запрос POST и определите его URL, заголовки и полезные данные (payload).
  2. Проверьте заголовки и полезную нагрузку:

    • Убедитесь, что все заголовки, такие как Content-Type, а также куки, токены CSRF и другие параметры, соответствуют реальным значениям, которые наполняются при отправке запроса браузером.
  3. Обновите команду wget или используйте библиотеку на языке программирования:

    • Команда wget не всегда лучшая для сложных обходных способов с AJAX на современных сайтах. Рассмотрите использование библиотеки вроде requests в Python, которая позволяет гибче настраивать запросы.
    import requests
    
    url = 'https://www.colorado.gov/revenueonline/_/EventOccurred'
    headers = {
       'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
       'Content-Type': 'application/x-www-form-urlencoded'
    }
    data = {
       'VIEW__': 'CG_LicVer',
       'LASTFOCUSFIELD__': '',
       'DOC_MORAL_ID__': '0',
       'DvfmoUb__0_0_Fdr2ZH': '7777777',
       # Убедитесь в правильности всех параметров, выясненных из DevTools
    }
    
    response = requests.post(url, headers=headers, data=data)
    print(response.text)
  4. Обработка ответа:

    • Убедитесь, что вы правильно обрабатываете полученные данные. Иногда сервер может вернуть JSON или другой формат, который вы должны обработать соответственно.

Заключение: Ошибка 405 требует внимательного изучения, поскольку неправильный метод запроса может легко приводить к таким сбоям. Использование инструментов разработчика и изучение AJAX-запросов поможет понять, как сайт взаимодействует с формами и какие меркетинговые стратегии могут быть необходимы для обработки данных сервером.

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

Капча загружается...