В принципе, я хочу отправить запрос POST для следующей формы.Отправка запроса POST по уже открытому URL-адресу в python
<form method="post" action="">
449 * 803 - 433 * 406 = <input size=6 type="text" name="answer" />
<input type="submit" name="submitbtn" value="Submit" />
</form>
Что я в принципе хочу сделать, это прочитать на странице, выяснить, уравнение в форме, вычислить ответ, введите ответ в качестве параметра для отправки с запросом POST, но без открытия нового URL для страница, поскольку новое уравнение появляется каждый раз, когда открывается страница, поэтому полученный ранее результат становится устаревшим. Наконец, я хочу получить страницу, которая появляется в результате отправки запроса POST. Я застрял в той части, где мне нужно отправить запрос POST, не открывая новый экземпляр URL. Кроме того, я был бы признателен за помощь в том, как читать страницу снова после запроса POST. (можно было бы назвать read()
?)
Код на Python В настоящее время я выгляжу примерно так.
import urllib, urllib2
link = "http://www.websitetoaccess.com"
f = urllib2.urlopen(link)
line = f.readline().strip()
equation = ''
result = ''
file1 = open ('firstPage.html' , 'w')
file2 = open ('FinalPage.html', 'w')
for line in f:
if 'name="answer"' in line:
result = getResult(line)
file1.write(line)
file1.close()
raw_params = {'answer': str(result), 'submit': 'Submit'}
params = urllib.urlencode(raw_params)
request = urllib2.Request(link, params)
page = urllib2.urlopen(request)
file2.write(page.read())
file2.close()
Проблема с выполнением этого вручную в веб-браузере заключается в том, что форма требует от машинного ответа ответа для правильной аутентификации, поскольку он имеет таймаут и не может аутентифицироваться при попытке сделать это вручную просто потому, что человек не может правильно ответить достаточно быстро. – ASCH
Я пытался использовать запросы, как вы предлагали, и я столкнулся с той же проблемой. Я верю, что с кодом res2 в приведенном выше коде он запускает новый отдельный запрос (который, в свою очередь, меняет вопрос, поэтому делает мой ранее сохраненный ответ из вопроса в res1 неправильным) – ASCH
Возможно ли это проблема с заголовком или файлы cookie вопрос? Запрос POST представляет собой отдельный запрос из предыдущего запроса GET, он не может быть объединен с одним запросом. Вы должны проверить заголовки и/или попытаться использовать сеанс (легко добавить, используя запросы, http://docs.python-requests.org/en/master/user/advanced/). – Loknar