Вопрос или проблема
Я пытаюсь сделать 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 и правильно отправить данные на сайт, выполните следующие шаги:
-
Используйте DevTools для анализа сетевых запросов:
- Откройте Chrome DevTools (или другой браузер с аналогичными средствами разработчика) и перейдите на нужную страницу.
- В разделе "Сеть" (Network) проследите за запросами, отправляемыми при взаимодействии с формой.
- Поищите запрос POST и определите его URL, заголовки и полезные данные (payload).
-
Проверьте заголовки и полезную нагрузку:
- Убедитесь, что все заголовки, такие как
Content-Type
, а также куки, токены CSRF и другие параметры, соответствуют реальным значениям, которые наполняются при отправке запроса браузером.
- Убедитесь, что все заголовки, такие как
-
Обновите команду 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)
- Команда
-
Обработка ответа:
- Убедитесь, что вы правильно обрабатываете полученные данные. Иногда сервер может вернуть JSON или другой формат, который вы должны обработать соответственно.
Заключение: Ошибка 405 требует внимательного изучения, поскольку неправильный метод запроса может легко приводить к таким сбоям. Использование инструментов разработчика и изучение AJAX-запросов поможет понять, как сайт взаимодействует с формами и какие меркетинговые стратегии могут быть необходимы для обработки данных сервером.