import urllib2, re, urllib
def login():
host = "http://localhost/cms/"
user = 'admin'
passw = 'admin'
error = "Login to CMS Made Simple"
form = [
('username', user),
('password', word)]
target = host + "/admin/login.php"
login_form_data = urllib.urlencode(form)
opener = urllib2.build_opener(target)
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
source = opener.open(target, login_form_data).read()
if re.search(error, source) == None :
print 'FOund =>>>' + target + 'Username : ' + user + 'Password : ' + word
else:
print 'Not Found=>> ' + target + ' Username : ' + user + 'Password : ' + word
login()
我得到了这个:
opener = urllib2.build_opener(host)
File "D:\Python27\lib\urllib2.py", line 486, in build_opener
opener.add_handler(h)
File "D:\Python27\lib\urllib2.py", line 322, in add_handler
type(handler))
TypeError: expected BaseHandler instance, got <type 'str'>
我认为问题在于:opener = urllib2.build_opener(target)
答案 0 :(得分:0)
关于urllib2.build_opener
的{{3}}:
处理程序可以是BaseHandler的实例,也可以是子类 BaseHandler(在这种情况下,必须可以调用构造函数 没有任何参数)。
您尝试传递str
:
target=host+"/admin/login.php"
...
opener = urllib2.build_opener(target)
尝试使用简化API的docs库来获取网址。
答案 1 :(得分:0)
如果您只是删除该行,它将起作用; build_opener不需要参数,除非您希望它执行特定的操作。在这种情况下,如果服务器希望使用cookie来保持您的登录状态,则可能需要添加CookieProcessor。
cjar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar)