python读取svn文件_Python 获取SVN资源(不知道realm时)

本文介绍如何在Python中使用urllib2库读取SVN文件,特别是在未知realm情况下。示例代码展示了如何设置HTTPBasicAuthHandler处理认证,并提供了两个参考资料示例。
摘要由CSDN通过智能技术生成

由于工作需要,要获取SVN资源,其实SVN也是通过HTTP协议获取的,所以使用Python的urllib2库。

此时我也不知道协议的realm,目前为止,我都不知道realm这个字段是做什么用的,看来得恶补一下网络知识了,呵呵。。。。。。。

好言归正传,上代码-----------

add_password(),有四个参数,分别是  “ realm,域名,用户名,密码”

由于不知道realm具体内容,所以用None代替

=========================华丽的分割线========================================

import urllib2

def get_unread_msgs(user, passwd):

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

password_mgr.add_password(None, 'http://svn.server.com', user, passwd)#由于不知道realm具体内容,所以用None代替

handle = urllib2.HTTPBasicAuthHandler(password_mgr)

opener = urllib2.build_opener(handle)

urllib2.install_opener(opener)

try:

data = urllib2.urlopen('http://svn.server.com/test.zip').read()

file = open('test.zip','wb')

file.write(data)

file.close()

except Exception, e:

if e.code == 401:

print "authorization failed"

else:

raise e # or do something else

except:

return None

if __name__ == "__main__":

get_unread_msgs('username', 'password123456')

下面是GOOGLE而来的代码两例,未成功,留作参考吧。。

例子一:

import urllib2

def get_unread_msgs(user, passwd):

auth = urllib2.HTTPBasicAuthHandler()

auth.add_password(

realm='New mail feed',

uri='https://mail.google.com',

user='%s'%user,

passwd=passwd

)

opener = urllib2.build_opener(auth)

urllib2.install_opener(opener)

try:

feed= urllib2.urlopen('https://mail.google.com/mail/feed/atom')

return feed.read()

except HTTPError, e:

if e.code == 401:

print "authorization failed"

else:

raise e

except:

return None

例子二:

代码结构:

|__GetFilesFromSVN.py

|__config.ini

|__fileList.txt

config.ini:

[INFO]

user = 用户名

passwd = 密码

fileList= fileList.txt

fileList.txt:

aaaaa.txt

bbbbb.txt

ccccc.txt

#----------------------------------------------

# Author : Jeff Yu

# Date : 2012-8-13

# Function : get files from SVN

#----------------------------------------------

#----------------------------------

# Step1: Get INFO

#----------------------------------

import sys,ConfigParser

try:

configFile = open("config.ini","r")

except IOError:

print "config.ini is not found"

raw_input("")

sys.exit()

config = ConfigParser.ConfigParser()

config.readfp(configFile)

configFile.close()

# get baseurl

try:

baseurl = config.get("INFO","baseurl")

# incase last "/" is missing in baseurl

baseurl = baseurl.rstrip("/")

baseurl = "%s/"%baseurl

except ConfigParser.NoOptionError:

print "baseurl is not found under section INFO in config.ini."

raw_input("")

sys.exit()

# get user

try:

user = config.get("INFO","user")

except ConfigParser.NoOptionError:

meg = "user is not found under section INFO in config.ini."

raw_input("")

sys.exit()

# get passwd

try:

passwd = config.get("INFO","passwd")

except ConfigParser.NoOptionError:

meg = "passwd is not found under section INFO in config.ini."

raw_input("")

sys.exit()

# get fileList

try:

fileList = config.get("INFO","fileList")

except ConfigParser.NoOptionError:

meg = "fileList is not found under section INFO in config.ini."

raw_input("")

sys.exit()

#----------------------------------

# Step2: Auth

#----------------------------------

import urllib2

realm = "Subversion Repositories"

auth = urllib2.HTTPBasicAuthHandler()

auth.add_password(realm, baseurl, user, passwd)

opener = urllib2.build_opener(auth, urllib2.CacheFTPHandler)

urllib2.install_opener(opener)

#----------------------------------

# Step3: Create Folder

#----------------------------------

import os

folderName = "svnFile"

if not os.path.exists(folderName):

os.mkdir(folderName)

#----------------------------------

# Step4: Get Files

#----------------------------------

fr = open(fileList,'r')

for i in fr:

i = i.strip("\n")

i = i.strip(" ")

# ignore the blank line

if i != "":

url = "%s%s"%(baseurl,i)

try:

data = urllib2.urlopen(url)

fw = open("%s/%s"%(folderName,i),'w')

fw.write(data.read())

fw.close()

print "Download: %s."%i

except urllib2.HTTPError, e:

# HTTPError is a subclass of URLError

# need to catch this exception first

mesg = str(e).split(" ")

errCode = mesg[2].rstrip(":")

if errCode == "401":

# HTTP Error 401: basic auth failed

print "Can not login in, please check the user and passwd in config.ini."

break

elif errCode == "404":

# HTTP Error 404: Not Found

print "Not Found: %s"%i

else:

print e

print "Failed to download %s"%i

except urllib2.URLError:

# 1.SVN server is down

# 2.URL is not correct

print "Please check SVN Server status and baseurl in config.ini."

break

fr.close()

raw_input("")

获取realm

import urllib2

import sys

url = '这里写URL'

username = '这里写用户名'

password = '这里写密码'

req = urllib2.Request(url)

try:

handle = urllib2.urlopen(req)

except IOError, e:

pass

else:

print "This page isn't protected by authentication."

sys.exit(1)

getrealm = e.headers['www-authenticate']

print getrealm

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值