HTTPS使用urllib2登录

时间:2009-06-25 19:52:48

标签: python authentication https urllib2

我目前有一个小脚本可以下载网页并提取一些我感兴趣的数据。没什么好看的。

目前我正在下载这样的页面:

import commands
command = 'wget --output-document=- --quiet --http-user=USER --http-password=PASSWORD https://www.example.ca/page.aspx'
status, text = commands.getstatusoutput(command)

虽然这很有效,但我认为删除对wget的依赖是有意义的。我认为将上面的内容转换为urllib2应该是微不足道的,但到目前为止我没有成功。互联网是完整的urllib2示例,但我没有找到任何符合我对HTTPS服务器的简单用户名和密码HTTP身份验证的需求。

2 个答案:

答案 0 :(得分:6)

this说,应该是直截了当的

  

[as]只要你的本地Python有SSL支持。

如果仅使用HTTP基本身份验证,则必须设置不同的处理程序,如here所述。

引用那里的例子:

import urllib2

theurl = 'http://www.someserver.com/toplevelurl/somepage.htm'
username = 'johnny'
password = 'XXXXXX'
# a great password

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
# this creates a password manager
passman.add_password(None, theurl, username, password)
# because we have put None at the start it will always
# use this username/password combination for  urls
# for which `theurl` is a super-url

authhandler = urllib2.HTTPBasicAuthHandler(passman)
# create the AuthHandler

opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)
# All calls to urllib2.urlopen will now use our handler
# Make sure not to include the protocol in with the URL, or
# HTTPPasswordMgrWithDefaultRealm will be very confused.
# You must (of course) use it when fetching the page though.

pagehandle = urllib2.urlopen(theurl)
# authentication is now handled automatically for us

如果你做Digest,你将不得不设置一些额外的标题,但无论SSL使用情况如何,它们都是相同的。 Google表示python + urllib2 + http + digest。

干杯,

答案 1 :(得分:1)

urllib2文档中有一个使用基本身份验证的示例:

http://docs.python.org/library/urllib2.html#examples