具有异步服务器实现的代理协议库

proxy-protocol的Python项目详细描述


代理协议

具有asyncio服务器实现的代理协议库。在

Build StatusCoverage StatusPyPIPyPIPyPI

Specification

API Documentation

Docker Image

目录

安装和使用

$ pip install proxy-protocol

与基于^{}的服务器集成的目的是 非常简单。下面是一个示例,它将检测代理协议v1或 第二版。在

^{pr2}$

也可以根据协议的版本,简化协议的配置 从字符串中读取。在

fromproxyprotocol.versionimportProxyProtocolVersionpp_noop=ProxyProtocolVersion.get()pp_detect=ProxyProtocolVersion.get('detect')pp_v1=ProxyProtocolVersion.get('v1')pp_v2=ProxyProtocolVersion.get('v2')

本例中的pp_noop对象是一个特殊情况下的实现 根本不从流中读取代理协议头。它可以用来 禁用代理协议使用,而不会使服务器代码复杂化。在

您还可以查看^{}引用 实施。如果将代理配置为将代理协议发送到 localhost:10007,你可以看到它的作用:

$ proxyprotocol-echo --help
$ proxyprotocol-echo detect
$ proxyprotocol-echo noop

服务器使用率

其中包括两个基本的服务器实现供参考。利用两者 一起可以演示端到端的过程:使用proxyprotocol-server 要将代理协议头代理到proxyprotocol-echo,请执行以下操作:, 然后显示原始连接信息。在

这两种类型的服务器使用的hostname:port参数由 ^{}类,允许自定义SSL/TLS和代理 协议版本。在

回声服务器

proxyprotocol-echo服务器要求入站连接提供代理 表示连接的原始源的协议头。在 头,所有接收到的数据都将回显到客户端。在

proxyprotocol-echo --help
proxyprotocol-echo  # run the server

代理服务器

proxyprotocol-server服务器将入站连接代理到另一个服务器 主机/端口endoint,在出站连接前面加上代理协议 指示原始连接信息的标头。在

proxyprotocol-server --help
proxyprotocol-server --service localhost:10000 localhost:10007

开发和测试

你需要做一些额外的设置来开发和测试插件。弗斯特 关闭,我建议激活venv。然后,安装测试要求和 指向代理协议包的本地链接:

$ pip install -r test/requirements.txt
$ pip install -e .

使用运行测试py.测试公司名称:

$ py.test

如果你打算创建一个完整的套件,请务必创建一个完整的套件 CI/CD运行的测试正在通过:

$ py.test
$ mypy --strict proxyprotocol test
$ flake8 proxyprotocol test

Apy.测试run执行单元测试和集成测试。集成测试 使用模拟套接字来模拟命令和 响应,并保存在test/server/子目录中。在

类型提示

这个项目大量使用Python的type hinting系统,使用 干净运行mypy的意图:

mypy --strict proxyprotocol test

除非尽力使用类型,否则不会接受任何代码贡献 在代码库的其余部分中尽可能和常见的暗示。在

麻省理工学院执照

版权所有(c)2020 Ian Good

兹免费准许任何人取得复制品 本软件及其相关文档文件(“软件”)的 在软件中不受限制,包括但不限于权利 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的使用者 根据以下条件提供:

上述版权声明和本许可声明应包括在所有 软件的副本或大部分。在

本软件按“原样”提供,无任何形式的保证,明示或 包括但不限于适销性保证, 特定目的的适用性和非侵犯性。在任何情况下 作者或版权持有人应对任何索赔、损害赔偿或其他 无论是在合同诉讼、侵权诉讼或其他诉讼中,由以下原因引起的责任:, 不属于或与软件、使用或其他交易 软件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
netbeans根据命名约定返回布尔类的getter的Java名称   java如何在MessageFormat中使用单引号   java如何在整数数组中只对奇数排序,而将偶数保留在其原始位置?   自定义ArrayAdapter中未定义java构造函数   java joda时间格式化程序解析yyyyymmdd(额外一小时)   java Spring引导控制器测试始终返回404   java如何提取类文件以获取该类文件中的类?   JTable java列不会显示   java Selenium Web驱动程序输出错误的Web表行数   当应用程序在mac上打开时,java SWT选项卡项会从页面上消失   java如何将html文件映射到过滤器   swing Java计算一段时间内两点之间的转换   javawebsphere和javax。xml。ws。spi。提供者:提供者组织。阿帕奇。axis2。jaxws。spi。提供者不是子类型   For循环在Java中没有按预期继续?   java如何配置gson以排除0个整数值   java读取一个由tab分隔的文件,并将单词放入ArrayList中   java我需要做什么才能让LiveConnect重新工作?   sqlservermerge2xml&使用java提取这些数据并将其存储在db表中   java如何在模型中添加新对象时通知网格