1
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)

但是如何解决呢?我尝试了很多。

4

2 回答 2

0

关于文档urllib2.build_opener:_

handlers 可以是 BaseHandler 的实例,也可以是 BaseHandler 的子类(在这种情况下,必须可以在没有任何参数的情况下调用构造函数)。

您尝试通过str

target=host+"/admin/login.php"
... 
opener = urllib2.build_opener(target)

尝试使用简化 API 的请求库来获取 URL。

于 2012-10-29T11:44:00.957 回答
0

如果您只是删除该行,它将起作用;build_opener 不需要参数,除非你想让它做一些特定的事情。在这种情况下,如果服务器希望使用 cookie 让您保持登录状态,您可能需要添加 CookieProcessor。

cjar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar)
于 2012-10-29T11:48:59.290 回答