POST-запрос через urllib/urllib2?

Прежде чем вы что-нибудь скажете, я просмотрел SO, и решения не сработали. Мне нужно сделать почтовый запрос для сценария входа в Python. URL-адрес выглядит следующим образом: http://example.com/index.php?act=login. , то он принимает username и password через POST. Может ли кто-нибудь помочь мне с этим?

Я пытался:

import urllib, urllib2, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders.append(('User-agent', 'Mozilla/4.0'))
opener.addheaders.append( ('Referer', 'http://www.hellboundhackers.org/index.php') )

login_data = urllib.urlencode({'username' : '[redacted]',
                               'password' : '[redacted]'
                               })

resp = opener.open('http://[redacted].org/index.php?act=login', login_data)
print resp.read()
resp.close()

и немного изменено:

import urllib, urllib2, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders.append(('User-agent', 'Mozilla/4.0'))
opener.addheaders.append( ('Referer', 'http://www.hellboundhackers.org/index.php') )

login_data = urllib.urlencode({'act' : 'login',
                               'username' : '[redacted]',
                               'password' : '[redacted]'
                               })

resp = opener.open('http://[redacted].org/index.php', login_data)
print resp.read()
resp.close()

person Community    schedule 23.08.2011    source источник
comment
Конечно, можно сделать почтовый запрос из Python. Пожалуйста, покажите, что вы пробовали, иначе мы не сможем сказать вам, что не так.   -  person Greg Hewgill    schedule 23.08.2011
comment
Укажите конкретное решение, которое вы пробовали, и с какой проблемой/ошибкой вы столкнулись.   -  person Dyno Fu    schedule 23.08.2011
comment
Я только что отредактировал сообщение. Спасибо!   -  person    schedule 23.08.2011


Ответы (1)


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

Элемент <form> может выглядеть примерно так:

<form method="POST" action="/do_login">

В этом случае вы должны использовать /do_login в URL-адресе POST.

person Greg Hewgill    schedule 23.08.2011
comment
Я говорил с админом сайта, он сказал, что использует POST. Но я все равно проверю. Спасибо <form id="loginForm" method="POST" action="/index.php?act=login"> - person ; 23.08.2011
comment
Итак, это та же самая страница. Так откуда вы знаете, что это не работает? Вы получаете какие-либо ошибки? - person Greg Hewgill; 23.08.2011
comment
Я изучил вывод (print resp.read()), и вверху все еще присутствовали кнопки входа/регистрации. Я также попробовал test = opener.open('http://[redacted].org/index.php?act="app_view'), а затем print test.read() после строк ответа, сказал, что я не вошел в систему, поэтому у меня нет доступа к этой странице. - person ; 23.08.2011
comment
Могут быть и другие аспекты публикации формы, которые вам необходимо учитывать, например скрытые поля или файлы cookie. Они часто встречаются в формах входа, и вам может потребоваться предоставить дополнительную информацию. Это может стать довольно сложным, и важно хорошее понимание того, как работают формы и браузеры. - person Greg Hewgill; 23.08.2011
comment
Да, там было скрытое поле. Мой друг заметил это :P. Спасибо! - person ; 24.08.2011