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
Може да има други аспекти на публикуването на формуляра, които трябва да имате предвид, като скрити полета или бисквитки. Те са често срещани във формулярите за влизане и може да се наложи да предоставите допълнителна информация. Това може да стане доста сложно и доброто разбиране на това как работят формулярите и браузърите е от съществено значение. - person Greg Hewgill; 23.08.2011
comment
Да, имаше скрито поле. Приятелят ми го забеляза :P. Благодаря! - person ; 24.08.2011