python学习笔记 --- 关于openers和handlers

我们使用一个opener去返回一个URL。通常我们默认的opener是通过urlopen。但是也可以创建一个惯用的(custom)openers。openers使用handlers,每一个handler知道怎么为一个特定的URL模式(http,ftp,etc.)打开URLs。


创建一个opener,就要实例化一个OpenerDirector,然后不停地调用.add_handler(some_handler_instance)。
或者,可以使用build_opener,这个单一的函数默认增加了各种handlers,但提供提供了一种快速的方式去增加或重写默认的handlers。


install_opener可以用来创建一个opener对象(全局的默认opener)。这意味着调用urlopen时会使用你已经安装的opener。


opener对象有一个open的方法,它能够直接调用来返回URL,就像urlopen函数一样。所以说没有必要去调用install_opener,除非它更方便。 


创建和安装一个handler需要使用HTTPBasicAuthHandler。
当需要验证请求时,服务器发送一个header(以及401错误代码)请求验证身份。
这指定了一个authentication schema 和一个‘realm’。这个header模式就是:Www-authenticate: SCHEMA realm = ‘REALM’。


当发生401,用户应该重试请求,给header一个合适的姓名和密码。这就是基本的验证。为了简化这一过程,我们可以创建HTTPBasicAuthHandler的实例和一个opener去使用handler。


HTTPBasicAuthHandler会使用一个对象去调用一个密码管理者来处理URLs和realms到密码和用户名的映射。
如果你知道realm是什么(从服务器发送的authentica header),就可以使用HTTPPasswordMgr。
但是一般人并不知道realm是什么,在这种情况下,我们可以方便地使用HTTPPasswordMgrWithDefaultRealm,它允许你为URL去定义一个默认的username和password。
而它的add_password方法提供None作为realm的参数。

<span style="font-size:14px;"># create a password manager
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

# Add the username and password.
# If we knew the realm, we could use it instead of ``None``.
top_level_url = "http://example.com/foo/"
password_mgr.add_password(None, top_level_url, username, password)

handler = urllib2.HTTPBasicAuthHandler(password_mgr)

# create "opener" (OpenerDirector instance)
opener = urllib2.build_opener(handler)

# use the opener to fetch a URL
opener.open(a_url)

# Install the opener.
# Now all calls to urllib2.urlopen use our opener.
urllib2.install_opener(opener)</span>


proxies


urllib2自动检测代理服务器设置和使用,它通过使用ProxyHandler。

<span style="font-size:14px;">>>> proxy_support = urllib2.ProxyHandler({})
>>> opener = urllib2.build_opener(proxy_support)
>>> urllib2.install_opener(opener)</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常表示您尝试在没有权限的情况下打开一个文件或目录。 在这种情况下,您需要检查代码中是否有任何地方尝试打开一个文件或目录,并确保您有足够的权限来打开它。 如果您正在尝试打开一个目录,请确保您有足够的权限来读取和写入该目录。您可以使用操作系统的文件管理器或命令行工具来设置目录的权限。 如果您正在尝试打开一个文件,请确保您有足够的权限来读取该文件。您可以使用操作系统的文件管理器或命令行工具来查看文件的权限并设置文件的权限,以便您可以进行读取操作。 请尝试以下修改代码: ``` import os # 检查是否有足够的权限来打开目录 if not os.access('C:\\Users\\dell\\Desktop\\U\\Unet3-Plus-main\\Unet3+\\image', os.R_OK | os.W_OK): # 如果没有足够的权限,请设置目录的权限 os.chmod('C:\\Users\\dell\\Desktop\\U\\Unet3-Plus-main\\Unet3+\\image', 0o755) # 打开文件或目录 with open('C:\\Users\\dell\\Desktop\\U\\Unet3-Plus-main\\Unet3+\\image', 'r') as f: # 处理文件或目录 ... ``` 在这个修改后的代码中,我们使用os.access方法检查是否有足够的权限来打开目录。如果没有足够的权限,则使用os.chmod方法设置目录的权限。然后,我们使用with语句打开文件或目录,并在其中处理文件或目录。 请注意,此代码示例中的省略部分需要您根据具体情况进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值