urllib库request模块中各种Handler的用法总结

本文详细介绍了Python中urllib库request模块的各种Handler用法,包括HTTPHandler、HTTPBasicAuthHandler、ProxyHandler、ProxyBasicAuthHandler及HTTPCookieProcessor等。通过示例展示了如何设置代理、处理认证和Cookies。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

urllib库request模块中各种Handler的用法总结如下:

# !/usr/bin/env python
# -*- coding:utf-8 -*-

"""
HTTPHandler
HTTPBasicAuthHandler
ProxyHandler
ProxyBasicAuthHandler
HTTPCookieProcessor
"""

import urllib.request
import urllib.parse
import http.cookiejar


# HTTPHandler,普通的HTPP处理器,等价于直接用urlopen()方法
url="http://www.baidu.com/"

# 获取handler
# 可以传递参数 debuglevel=1 ,打开调试模式
http_handler=urllib.request.HTTPHandler()

# 获取opener,参数为处理器对象,可以传递多个
opener=urllib.request.build_opener(http_handler)

# 方式一:安装全局的代理处理器
urllib.request.install_opener(opener)
resp=urllib.request.urlopen(url)

# 方式二:代理处理器只在当前代码块生效
# resp=opener.open(),接收一个url或Request对象,返回Response
# 接收url
# resp=opener.open(url)
# 接收Request对象
# req=urllib.request.Request(url,data=b'form data',headers={})
# resp=opener.open(req)

print(resp.read().decode('utf-8'))



# HTTPBasicAuthHandler,需要进行验证的HTTP处理器
# HTTPPasswordMgrWithDefaultRealm,密码信息管理器
http_passwd_mgr=urllib.request.HTTPPasswordMgrWithDefaultRealm()
http_passwd_mgr.add_password(realm=None,uri="test.com",user="username",passwd="password")

# 创建验证处理器对象,参数为密码管理器
http_auth_handler=urllib.request.HTTPBasicAuthHandler(http_passwd_mgr)

# 构造opener
opener=urllib.request.build_opener(http_auth_handler)

# open
resp=opener.open("fullurl")

print(resp.status)



# 代理处理器
proxy_switch=True
url="http://www.baidu.com/"
# ProxyHandler
# 开放代理
# 创建代理处理器,参数为字典{"代理类型":"代理地址"}
null_proxy_handler=urllib.request.ProxyHandler({})
public_proxy_handler=urllib.request.ProxyHandler({"https":"14.221.165.43:9797"})

# 私有代理(需要进行验证)
# 方式一:
proxy_auth_handler=urllib.request.ProxyHandler({"https":"username:passwd@14.221.165.43:9797"})
# 方式二:
# ProxyBasicAuthHandler(与HTTPBasicAuthHandler相同)

# 根据需求,构建opener
if proxy_switch:
    opener=urllib.request.build_opener(public_proxy_handler,proxy_auth_handler)
else:
    opener=urllib.request.build_opener(null_proxy_handler,proxy_auth_handler)

resp=opener.open(url)

print(resp.read().decode('utf-8'))



"""
处理Cookie
    cookie处理器
        urllib.request.HTTPCookieProcessor
    
    # 保存cookie信息
    http.cookiejar.CookieJar
        http.cookiejar.FileCookieJar
            http.cookiejar.MozillaCookieJar
            http.cookiejar.LWPCookieJar
"""
url="http://test.com/"
form_data={"username":"username","password":"password",}
form_data=urllib.parse.urlencode(form_data).encode('utf-8')
request_headers={}
req=urllib.request.Request(url,data=form_data,headers=request_headers)

# 获取CookieJar对象
cookiejar=http.cookiejar.CookieJar()

# 获取cookie处理器对象
# 参数为CookieJar对象,将自动把第一次POST请求时,生成的cookie信息保存起来,
# 以后再请求同一服务器时,将自动提供该信息
cookie_handler=urllib.request.HTTPCookieProcessor(cookiejar)

# 构建opener
opener=urllib.request.build_opener(cookie_handler)

resp=opener.open(req)

print(resp.getcode())

# 再次访问已登录的网站,此时,将自动使用cookie信息。
resp=opener.open("test_url")




Python中的`urllib`是一个处理URL请求的模块,它包含多种`Handler`类用于处理不同的网络请求任务。以下是几种常见的`Handler`及其用途: 1. `HTTPHandler`:这是默认的HTTP请求处理器,用于发送GET、POST等标准的HTTP请求。你可以直接使用`urlopen()`函数创建并处理这种类型的请求。 ```python import urllib.request response = urllib.request.urlopen('http://example.com') ``` 2. `HTTPSHandler`:它是`HTTPHandler`的SSL/TLS安全版本,用于处理HTTPS请求。如果需要处理加密连接,可以创建这个类型的Handler。 ```python https_handler = urllib.request.HTTPSHandler() opener = urllib.request.build_opener(https_handler) opener.open('https://www.example.com') ``` 3. `FTPHandler`:专门用于FTP(文件传输协议)的请求。如果你需要下载或上传文件到FTP服务器,应该使用这个类。 ```python ftp_handler = urllib.request.FTPHandler() ftp_opener = urllib.request.build_opener(ftp_handler) ftp_opener.open('ftp://username:password@example.com/') ``` 4. `DataHandler`:用于数据 POST 请求,当你需要提交表单数据或者其他非纯文本数据时,可以用这个类。 ```python data_handler = urllib.request.HTTPPasswordMgrWithDefaultRealm().add_password(None, 'http://example.com', 'username', 'password') auth_handler = urllib.request.HTTPBasicAuthHandler(data_handler) data_opener = urllib.request.build_opener(auth_handler) data_opener.open('http://example.com/form-data', data=b'key=value&another=pair') ``` 5. `ProxyHandler`:用于设置代理服务器,当你需要通过代理上网时,可以创建一个`ProxyHandler`实例。 ```python proxy_handler = urllib.request.ProxyHandler({'http': 'http://proxy.example.com:8080'}) opener = urllib.request.build_opener(proxy_handler) opener.open('http://example.com') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值