在去年的一篇旧文中(002. HTTP 代理原理及 Python 简单实现),实现了简单的 HTTP 代理服务器。现在回头看来,发觉十分简陋,实际用处并不大,特此加以改进。
(相关资料图)
主要改进方面如下:
优化了代码逻辑,高度封装,调用方便;
全部采用 Python 内置标准库,深入了解底层原理;
支持代理认证机制,用于验证客户端身份;
支持多层代理,可配置代理服务器的代理;
支持 HTTP 的 GET、POST 方法;
丰富了代码注释与类型注解。
创建 ProxyServer 服务器类,继承自 http.server 的 ThreadingHTTPServer。新增 auth、proxy_addr、proxy_auth,用于实现多层代理与身份认证。
Proxy-Authorization 是一个请求首部,其中包含了用户代理提供给代理服务器的用于身份验证的凭证。这个首部通常是在服务器返回了 407 Proxy Authentication Required 响应状态码及 Proxy-Authenticate 首部后发送的。
Proxy-Authorization: <type> <credentials>
一个服务器实例最多有两个用于身份验证的凭证,且服务器运行后一般不会再改变。为避免每次请求都需计算比对认证,初始化时就先计算好密钥。
在请求处理程序中,由于增加了认证机制,故每次请求前均需进行身份认证。同时,为了起到较好的匿名效果,删去与 Proxy 相关请求头。
每次请求前认证,不成功直接结束该次请求:
对于隧道代理,专门用一个函数实现当前服务器与另一代理服务器或目标网站服务器之间的连接。采用 http.client 中的 HTTPConnection 实现二者之间的连接:
在建立好隧道之后,剩下的就比较简单了。先给客户端响应 CONNECT 成功,再直接转发 TCP 数据就可以了。
对于 handle_tcp 方法,相较于原来略有优化。主要是精简了代码,实现逻辑并未改变。
虽然现在主流网站均采用 HTTPS 加密传输,但仍有些时候需要用到 HTTP 请求,也需考虑在内。简单实现逻辑如下:
由于 GET 与 POST 方法在 HTTPConnection 中差别不大,可以用 GET 的方法来处理 POST 请求,其他 HTTP 方法不予考虑。
在全面优化后,使用十分简单。四行代码即可搭建一个最简单的代理服务器:
若有多层代理及身份认证需要,可以参照以下例子使用:
完整代码如下:
由浅入深写代理(6)-http-代理:https://zhuanlan.zhihu.com/p/28737960
由浅入深写代理(7)-https-代理:https://zhuanlan.zhihu.com/p/2876766
http.server --- HTTP 服务器:https://docs.python.org/zh-cn/3/library/http.server.html
http.client --- HTTP 客户端:https://docs.python.org/zh-cn/3/library/http.client.html
Proxy-Authorization:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Proxy-Authorization
HTTP 身份验证:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication
请求测试网站:https://httpbin.org/
精彩推荐
1、《抗战之基地降临》,作者:阿布阿小布。2、《抗战之钢铁咆哮》,作者:闪光的铁锤。3、《穿越之无敌...
最佳答案北大西洋东半部、欧洲及亚洲,包括中南半岛,不包括阿拉伯半岛、印度半岛。全球岩石圈划分为六...
1848年,《共产党宣言》发表,标志着科学社会主义的诞生。科学社会主义是马克思主义的三个组成部分之一...
电脑软键盘如何打开步骤如下:1、要打开调出电脑软键盘,我们先点击开始菜单找到且打开菜单选项下的运行...
最佳答案因为Zukerberg他家已经移民到美国,成为了美国人,所以Zukerberg不会按照德语发音来念的,虽然...
西施姓施,原名施夷光,出生于春秋末越国苎萝,天生丽质,时越国称臣于吴国,越王勾践卧薪尝胆,谋复国...
1 公平是效率得以实现的基础。随着社会的进步和发展,在复杂的经济环境因素影响下,产生了以按劳分配为...
琼台位于浙江天台县城西北8公里。浙江,简称浙,是中华人民共和国省级行政区。省会杭州,位于中国东南沿...
《管理观察》是普通国家级刊物,不是核心期刊。有国家认可的分级可查。《管理观察》的主管单位是中华人...
1、首先就是准备备案的各项资料,网站的基础是要有的比如域名,服务器,还有就是身份证明以及网站核验单...
1、首先就是准备备案的各项资料,网站的基础是要有的比如域名,服务器,还有就是身份证明以及网站核验单...
5月20日是网络情人节,郑州陈寨花卉市场的一家花店看到一束与众不同的花,竟是用15个钢丝球包扎的。花店...
相较于火车站,机场的免费Wi-Fi速度要快了不少,而全球最快的免费Wi-Fi机场名单,也被统计了出来。美国...
近日,山东省高级人民法院向社会通报全省法院消费者权益司法保护工作情况及10起典型案例。据了解,五年...
南京市19日通报,公安部门在疫情防控期间依法打击各类涉疫违法犯罪行为,截至3月18日,全市共查处各类涉...
日前,北京市人民政府新闻办公室举行新闻发布会,解读《北京市全民科学素质行动规划纲要(2021—2035年)...
去年下半年以来,受多重因素影响,房地产市场出现下行态势。今年以来,各方共同努力持续稳地价、稳房价...
联合国人权理事会第49届会议新疆经济社会发展与人权保障边会18日在广州举办。会议由中国人权研究会、中...
人力资源和社会保障部近日印发《关于开展技术技能类山寨证书专项治理工作的通知》(以下简称《通知》),...
针对网络消费乱象,最高人民法院近期发布《最高人民法院关于审理网络消费纠纷案件适用法律若干问题的规...
资讯News
01-31
01-31
01-31
01-31
01-31
01-31
01-30
01-30
01-30
01-30
01-30
01-30
01-29
01-29
11-03
11-03
11-03
11-03
11-03
11-03
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...