2

我正在尝试使用 python 编写一个基于 Web 的小型代理,我可以获取并显示普通网站,但我无法登录到 facebook/gmail/...任何使用 login 的东西。我在这里看到了一些身份验证示例 http://docs.python.org/release/2.5.2/lib/urllib2-examples.html但我不知道如何为所有登录的网站制定通用解决方案, 任何想法?

我的代码是:

def showurl():
    url=request.vars.url
    response = urllib2.urlopen(url)
    html = response.read()
    return html
4

2 回答 2

2

您的代理服务器需要存储 cookie,在 stackoverflow 中搜索 cookielib。

许多网站以不同的方式对客户端进行身份验证,因此您的工作是使用您的代理服务器尽可能多地伪造客户端。一些网站通过浏览器类型进行身份验证,一些网站通过创建 cookie 并将 sessionId 存储在其中,或者其他允许执行一些身份验证步骤的 JavaScript 隐藏内容。就我的小经验而言,所有重要的东西都以饼干结尾。

这只是如何使用 cookielib 的简单示例。

import urllib, urllib2, cookielib, getpass

username = ''
button = 'submit'
www_login = 'http://website.com'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders.append(('User-agent', 'Mozilla/4.0'))
opener.addheaders.append( ('Referer', '/dev/null') )

login_data = urllib.urlencode({'username' : username, 'password': getpass.getpass("Password:"), 'login' : button})
resp = opener.open(www_login, login_data)
print resp.read()

已编辑:不要用“基本 HTTP 身份验证”和 facebook/gmail 身份验证误导自己,因为它是不同的东西。“基本 HTTP 身份验证”或“摘要 HTTP 身份验证”由 Web 服务器完成,而不是您要登录的网站。

于 2012-06-03T07:59:04.500 回答
1

http://www.voidspace.org.uk/python/articles/authentication.shtml#id24

于 2012-06-03T08:43:08.770 回答