Я пытаюсь отправить POST с помощью механизации, однако мой код не будет работать иногда (и я знаю почему). Я использовал механизацию, сэр и запросы. С механизацией и сардинами он работает, а с просьбами - нет. Вероятно, я делаю это неправильно.Отправка POST с помощью механизации и запросов.
Мой код механизации. Следующие работы:
#!/usr/bin/env python
import sys
import urllib
import mechanize
from mechanize import ParseResponse, urlopen, urljoin
response = urlopen(url)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
form["username"] = "avi"
form["password"] = "stackoverflow"
urlopen(form.click())
Мой код саржа. Он также работает:
import os
import twill
from twill.commands import *
out = open(os.devnull,"w")
twill.set_output(out)
go(url)
formvalue("1", "username", "avi")
formvalue("1", "password", "stackoverflow")
submit()
go(url2) #some protected page
content = show()
print 'content is',content[:100]
Исходя из того, что я понимаю, механизируйте или сперма сначала достает страницу, заполняет форму и отправляет форму. Но проблема здесь, иногда целевая страница отображает случайную страницу без какой-либо формы. В этом случае я получаю ошибку, очевидно, потому что нет формы для показа. Я не хочу обрабатывать эту ошибку, потому что я уже знаю URL-адрес публикации. даже если отображается некоторая случайная страница, после того, как я нажимаю далее, загружается одна и та же форма. URL-адрес POST, все поля остаются такими же. Поэтому я хотел отправить запрос POST напрямую, так как я уже знаю подробности, все необходимое. Вот мой код, based on:
browser = mechanize.Browser()
parameters = {"username" : "avi",
"password" : "stackoverflow",
}
data = urllib.urlencode(parameters)
browser.open(post_url,data)
cool = browser.open(post_url + '%s' % data).read()
print cool
Я получаю сообщение об ошибке:
urllib2.URLError: <urlopen error [Errno 61] Connection refused>
Я попробовал то же самое с запросами. Но я получаю ту же ошибку, что и выше. Вот код:
import requests
from requests import session
payload = { 'username': 'avi','password': 'stackoverflow'}
url1 = 'http://example.com/login.php'
url2 = 'http://example.com/protected.php'
with session() as c:
c.post(url1, data=payload)
c.get(url2)
Так что я ткнул туда и сюда, прочитал несколько больше коды доступна в Интернет, и я думаю, что это не работает, потому что для предотвращения CSRF. Так что я пошел на тот же страницу с саржей, сделал showforms и увидел там некоторое значение с маркером:
Вот что я хочу:
- Do POST с Mechanize и запросами (без загрузки страница первая)
- Как обращаться с токенами CSRF?
- Как отлаживать «urlopen ошибки [Errno 61] В соединении отказано»
Я тоже не могу это сделать: http://pastie.org/8367073 Я получаю ту же ошибку – avi
@avi звучит так, как ваш IP заблокирован.Вы должны попробовать другой хост или получить новый IP (например, сбросить свой рекламный маршрутизатор). – Rolando
Я пробовал, но не успел. А также мой другой код с twill работает нормально – avi