使用urllib登录网站

时间:2012-09-04 22:09:30

标签: python urllib2 urllib

我正在尝试使用urllib登录网站。这是我公司的内部网站。

登录页面如下所示:

<form id="login" action="/accounts/login/" method="POST">
<label for="username">Username</label>
<input name="username" type="text" class="text"><br>
<label for="password">Password</label>
<input name="password" type="password" class="text"><br>
<input name="login_submit" type="submit" value="Sign in" class="submit">

我的python看起来像这样:

url = 'http://10.188.36.250/accounts/login/'
values = {'user_name':'xxxx', 'password':'xxxxx'}
data = urllib.urlencode(values)
req = urllib2.Request(url,data)
res = urllib2.urlopen(req)

我回来了:

urllib2.HTTPError:HTTP错误403:FORBIDDEN

我做错了什么?

3 个答案:

答案 0 :(得分:3)

除了使用“user_name”作为键而不是“username”之外,您正在做的一切正确。 注意表单的变量。

答案 1 :(得分:1)

默认的urllib2 open不支持cookie。它实际上不支持任何东西,它是一个f(## $ @#nightmare可以使用。

要使用urllib2完成任务,请查看urllib2.HTTPCookieProcessor()urllib2.build_opener()。前者被传递到后者,你将打开页面。我不记得确切,但你的代码看起来像:

opener= urllib2.build_opener( urllib2.HTTPCookieProcessor() )
req = urllib2.Request( url , data )
res = opener.open( req )

我还建议查看requests模块,这使得在互联网上做的事情在python(http://docs.python-requests.org/en/latest/index.html

中不那么糟糕

答案 2 :(得分:1)

这完全是因为您必须在连接时使用标头。插入最受欢迎的网络浏览器之一。在你的标题中。 Mozilla - 至少。您的代码看起来像 -

req = urllib2.Request( url , data, headers=headers)

其中header = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12'}