python3.7怎么安装wsgiref_python模块介绍-wsgiref :WSGI工具和参考

WSGI是为Python定义的Web服务器和Web应用程序之间的接口标准,旨在提高Web应用的可移植性。本文介绍WSGI的工作原理,包括其与Web服务器及应用框架的交互方式,以及通过中间件实现的功能扩展。

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

WSGI简介

Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。标准的接口很容易支持许多不同的Web服务器应用程序的WSGI。只有Web服务器和编程框架的开发者需要知道的WSGI设计的细节。通常只需要安装WSGI应用或使用现有的框架编写的Web应用程序。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。

以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。

WSGI[1](有时发音作'wiz-gee')是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。

WSGI有两方:“服务器”或“网关”一方,以及“应用程序”或“应用框架”一方。服务方调用应用方,提供环境信息,以及一个回调函数(提供给应用程序用来将消息头传递给服务器方),并接收Web内容作为返回值。

所谓的 WSGI中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:

重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象。

允许在一个进程中同时运行多个应用程序或应用框架。

负载均衡和远程处理,通过在网络上转发请求和响应消息。

进行内容后处理,例如应用XSLT样式表。

wsgiref简介

快速入门

安装

# pip install urllib3

使用

>>> import urllib3

>>> http = urllib3.PoolManager()

>>> r = http.request('GET', 'http://google.com/')

>>> r.status

200

>>> r.headers['server']

'gws'

>>> r.data

...

组件

urllib3在能力、扩展性和sanity之间有很好的平衡。代码库是可重用的实用工具,抽象组合在一起形成一些有用的层。

PoolManager

最高层是PoolManager(...)。

PoolManager会在请求同一台主机时重用连接,这适合多数场景且不会严重丢失效率,当然你也可以在底层进行更细粒度的控制。

>>> import urllib3

>>> http = urllib3.PoolManager(10)

>>> len(http.pools)

0

>>> r1 = http.request('GET', 'http://automationtesting.sinaapp.com/blog')

>>> len(http.pools)

1

>>> r2 = http.request('GET', 'http://automationtesting.sinaapp.com/blog/m_urllib3')

>>> len(http.pools)

1

>>> r3 = http.request('GET', 'http://urllib3.readthedocs.org/en/latest/')

>>> len(http.pools)

2

PoolManager是的ConnectionPool对象集的代理。他们都继承自RequestMethods,以确保API类似。

ProxyManager

ProxyManager是PoolManager的HTTP代理识别子类。它为所有HTTP连接生成单个HTTPConnectionPool实例,为HTTPS连接生成单个per-server:portdeHTTPSConnectionPool实例。

>>> proxy = urllib3.ProxyManager('http://localhost:3128/')

>>> r1 = proxy.request('GET', 'http://google.com/')

>>> r2 = proxy.request('GET', 'http://httpbin.org/')

>>> len(proxy.pools)

1

>>> r3 = proxy.request('GET', 'https://httpbin.org/')

>>> r4 = proxy.request('GET', 'https://twitter.com/')

>>> len(proxy.pools)

3

2

ConnectionPool

HTTPConnectionPool和HTTPSConnectionPool类允许为单个主机定义的连接池,该连接池可以自动重用连接并是线程安全的。

当SSL模块是可用时,那么HTTPSConnectionPool对象检查SSL证书。

>>> conn = urllib3.connection_from_url('http://www.google.com.hk')

>>> r1 = conn.request('GET', 'http://www.google.com.hk/')

>>> r2 = conn.request('GET', '/search')

>>> r3 = conn.request('GET', 'http://wwww.yahoo.com/')

Traceback (most recent call last):

File "", line 1, in

File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 75, in request

**urlopen_kw)

File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 88, in request_encode_url

return self.urlopen(method, url, **urlopen_kw)

File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 530, in urlopen

raise HostChangedError(self, url, retries - 1)

urllib3.exceptions.HostChangedError: HTTPConnectionPool(host='www.google.com.hk', port=None): Tried to open a foreign host with url: http://wwww.yahoo.com/

ConnectionPool是连接到特定主机的池。试图在池中访问汽提塔主机将引发HostChangedError异常,除非你设置assert_same_host=False。

如果你需要访问多个主机单不希望管理ConnectionPool,就需要PoolManager。

ConnectionPool是由httplib.HTTPConnection集组成。

Foundation

Notes

SSL/TLS的压缩在Python3.2+因为CRIME attack默认禁用。在Python 2中使用pyOpenSSL的contrib模块也可以禁用,但这需要额外的依赖,并可能对PyOpenSSL产生副作用。

本文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值