首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >登录到vBulletin

登录到vBulletin
EN

Stack Overflow用户
提问于 2011-12-08 14:08:13
回答 2查看 2.9K关注 0票数 1

我正在尝试用Python做一个登录到vBulletin论坛的程序。

我只需要访问一个页面,但为了查看该页面,我必须登录。

下面是我的代码:

代码语言:javascript
复制
#-*- coding:utf-8 -*-

import urllib, urllib2, cookielib, hashlib, time

def variables():
    domain = "www.example.com"
    uname = "UserName"
    passwd = "Password"

    # Create url
    if domain.startswith('http://'):
         url = domain
    else:
        url = 'http://' + domain

    login(url, uname, passwd)


def login(url, uname, passwd):
    loginurl = url + '/login.php?do=login'
    md5 = hashlib.md5(passwd);md5 = md5.hexdigest()
    # Options for request
    opts = {
        'do': 'login',
        'vb_login_md5password': md5,
        'vb_login_md5password_utf': md5,
        's': '',
        'vb_login_username': uname, 
        'security_token': 'guest', 
    }
    data = urllib.urlencode(opts)

    # Request header
    global headers
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'es-es,es;q=0.8,en-us;q=0.5,en;q=0.3',
        'Accept-Encoding': 'gzip,deflate',
        'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
        'Connection': 'keep-alive',
        'Referer': loginurl,
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Lenght': '205'
    }

    # Cookie Handling
    jar = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))

    # Send Request
    opener.addheader = headers
    opener.open(loginurl, data)

    # Check
    response = opener.open('http://example.com/usercp.php?variable')
    print response.read()


variables()

问题是它没有让我登录,我也找不到原因。

EN

回答 2

Stack Overflow用户

发布于 2011-12-08 16:51:00

1)需要向login.php?do=login发送vb_login_name和vb_login_password

2)你也需要把下面的值发送给login.php?do=login (查看html代码)

代码语言:javascript
复制
<input type="hidden" name="s" value="215c619cb0227a30bab788ca0adb1c42" />
<input type="hidden" name="securitytoken" value="guest" />
<input type="hidden" name="do" value="login" />
<input type="hidden" name="vb_login_md5password" />

下面的线表示在将这些值发送到login.php之前,应该对vb_login_password、vb_login_md5password、vb_login_md5password_utf执行md5hash操作

代码语言:javascript
复制
<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)">

HTTP POST数据: username=abc,password=123

代码语言:javascript
复制
POST /forums/login.php?do=login HTTP/1.1
Host: absolutewrite.com
Connection: keep-alive
Content-Length: 216
Cache-Control: max-age=0
Origin: http://absolutewrite.com
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.0 Safari/535.11
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://absolutewrite.com/forums/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: UTF-8,*;q=0.5
Cookie: bbsessionhash=215c619cb0227a30bab788ca0adb1c42; bblastvisit=1323333120; bblastactivity=0

vb_login_username=abc&vb_login_password=&s=215c619cb0227a30bab788ca0adb1c42&securitytoken=guest&do=login&vb_login_md5password=202cb962ac59075b964b07152d234b70&vb_login_md5password_utf=202cb962ac59075b964b07152d234b70
票数 0
EN

Stack Overflow用户

发布于 2011-12-09 18:05:08

代码语言:javascript
复制
opts = {
        'do': 'login',
        'vb_login_md5password': md5,
        'vb_login_md5password_utf': md5,
        'vb_login_password':'',
        's': '215c619cb0227a30bab788ca0adb1c42',
        'vb_login_username': uname, 
        'security_token': 'guest', 
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8427289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档