3

我正在尝试使用 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">

我的蟒蛇看起来像这样:

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:禁止

我究竟做错了什么?

4

3 回答 3

3

你做的一切都是对的,除了使用“user_name”作为键而不是“用户名”。注意表单的变量。

于 2012-09-04T22:12:28.360 回答
1

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

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

其中标题 ={'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'}

于 2012-09-11T13:03:29.883 回答
1

默认的 urllib2 open 不能很好地支持 cookie。它实际上不能很好地支持任何东西,它是 af(##$@# 的噩梦。

要使用 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

于 2012-09-04T22:59:43.503 回答