编写icap服务器的框架
pyicap的Python项目详细描述
py icap
==
>用于编写icap服务器的python 3框架
age,运行它来安装
包:
您也可以使用pip或easy install安装:
sudo pip install py icap
什么是icap?
----
此类代理是一个icap客户端。
icap可用于检查权限、扫描病毒、放置广告或
否则修改头、内容或请求url或http请求
和/或响应。这些都可以在不修改代理服务器的
代码的情况下完成。
on的stock-basehttpserver类是这样的。
如果必须声明一个关系,
我说icap是http的兄弟,而不是它的子级。
由于这种关系,http服务器或客户端不能简单地扩展(甚至是修补)来处理icap。这就是为什么我选择
进行复制,然后完全重写basehttpserver类
它是如何工作的?
----
您可以使用一个框架,方法是从pyicap包导入数据,
扩展protocol handler类并启动服务器,将
处理程序传递给它:
`` python
!!/bin/env python
-*-编码:utf8-*
import random
import socketserver
from pyicap import*
class threadingsimpleserver(socketserver.threadingmixin,icapserver):
pass
class icaphandler(baseicaprequesthandler):
def echo_选项(self):
self.set_icap_response(200)
self.set_icap_header('methods','respmod')
self.set_icap_header('preview','0')
self.send_headers(false)
def echo_respmod(self):
self.no_adaptation_required()
port=13440
=threadingsimpleserver(('',port),icaphandler)
尝试:
,而1:
服务器.handle_request()
除了键盘中断:
打印"完成"
````
以上示例是一个重写的带有
线程的simplehttpserver示例。socketserver.threadingmixin可以与icapserver一起使用,就像您将其与simplehttpserver一起使用一样。
对于每个服务端点,都有一对方法。当前的
示例只是告诉icap客户机请求
不需要修改而什么都不做。
icap定义了三种类似于http的方法:options、reqmod和respmod。
options在任何情况下都必须处理。端点必须支持
reqmod或respmod,但不能同时支持两者。但是,这是不强制的,而且根据squid 3文档,这种重载甚至可以在squid上工作。
g报头或以其他方式损坏请求。
检查要下载的文件是否有病毒、水印图像或
音频文件、放置广告横幅或以其他方式修改内容和/或请求的报头圣
icap与http一样使用url。每个icap服务都有一个类似的url:
icap://icap.myorganization.com/place懔banners
pyicap框架将解析此url,确定要调用的icap方法(options、reqmod或respmod),并调用用户(可能)提供的处理程序方法之一。如果icap服务器找不到
处理程序方法,则返回404错误。
通过检查handler对象的特定字段,可以从icap请求中提取各种信息:
*enc_req:封装的请求行,带有3个元素的列表
*enc_req_headers:封装的请求头,列表字典
*enc_res_status:封装的响应状态
*enc_res_header s:封装的响应头
*有_body:true,如果icap请求有body
*service name:服务端点的名称
*封装的:包含"封装的:"头的内容作为dict
*ieof:true,如果read_chunk()遇到ieof块扩展
*命令:当前icap命令
*请求uri:包含icap请求的完整请求uri
*版本:当前icap请求的版本
*预览:无,或预览头中到达的整数
*允许:包含一组允许的()
*icap_response_code:如果调用了set_icap_response
,则包含响应代码。
这意味着
封装的消息不会改变。它遵循allow头,只有当客户端允许这样的响应时,
才发送204不需要自适应。
*cont():向客户端发送icap 100 continue响应。可以
用于请求客户端在预览后继续发送数据。
*read_chunk():从客户端读取块。请注意,此调用会阻塞。如果线路上没有可用数据,并且使用了连接:
保持活动,则会导致服务器挂起。只有在确定最终会有可用的数据时,才应调用此方法。如果返回空字符串,则表示它是最后一个块,不应执行进一步的读取。如果遇到ieof块扩展名,它还将
ieof变量设置为true。
如果封装的消息
完全适合预览,则在预览期间发送此扩展名。如果ieof为true,则continue()不能被
调用。
*set_icap_response(code):设置icap响应
*set_enc_status(stats):设置封装状态行
*set_enc_request(request):设置封装请求行
*set_enc_header(header,value):设置封装头r.多个
调用将导致头被多次发送。这对于cookie:headers来说很有用。
*set_icap_header(header,value):设置icap header。注意,这应该
不能正常使用,因为所有必需的icap头都由框架自动设置
(如istag、enclosed、date、
server等)
*send_头(has_body=false):可以在设置icap和
enclosed头之后使用。参数has_body表示
封装的消息体的存在。
*send_chunk(data):将块写入客户端。空块必须
作为最后一个块写入。必须在发送适当的
头之后发送数据,可以使用send_header()或enc_header()/icap_header()+
send_headers()。两种报头发送方法不能混合。
如果使用send_报头发送数据,必须将has_body参数设置为rly表示是否存在封装的
消息正文。
==
>用于编写icap服务器的python 3框架
age,运行它来安装
包:
您也可以使用pip或easy install安装:
sudo pip install py icap
什么是icap?
----
此类代理是一个icap客户端。
icap可用于检查权限、扫描病毒、放置广告或
否则修改头、内容或请求url或http请求
和/或响应。这些都可以在不修改代理服务器的
代码的情况下完成。
on的stock-basehttpserver类是这样的。
如果必须声明一个关系,
我说icap是http的兄弟,而不是它的子级。
由于这种关系,http服务器或客户端不能简单地扩展(甚至是修补)来处理icap。这就是为什么我选择
进行复制,然后完全重写basehttpserver类
它是如何工作的?
----
您可以使用一个框架,方法是从pyicap包导入数据,
扩展protocol handler类并启动服务器,将
处理程序传递给它:
`` python
!!/bin/env python
-*-编码:utf8-*
import random
import socketserver
from pyicap import*
class threadingsimpleserver(socketserver.threadingmixin,icapserver):
pass
class icaphandler(baseicaprequesthandler):
def echo_选项(self):
self.set_icap_response(200)
self.set_icap_header('methods','respmod')
self.set_icap_header('preview','0')
self.send_headers(false)
def echo_respmod(self):
self.no_adaptation_required()
port=13440
=threadingsimpleserver(('',port),icaphandler)
尝试:
,而1:
服务器.handle_request()
除了键盘中断:
打印"完成"
````
以上示例是一个重写的带有
线程的simplehttpserver示例。socketserver.threadingmixin可以与icapserver一起使用,就像您将其与simplehttpserver一起使用一样。
对于每个服务端点,都有一对方法。当前的
示例只是告诉icap客户机请求
不需要修改而什么都不做。
icap定义了三种类似于http的方法:options、reqmod和respmod。
options在任何情况下都必须处理。端点必须支持
reqmod或respmod,但不能同时支持两者。但是,这是不强制的,而且根据squid 3文档,这种重载甚至可以在squid上工作。
g报头或以其他方式损坏请求。
音频文件、放置广告横幅或以其他方式修改内容和/或请求的报头圣
icap与http一样使用url。每个icap服务都有一个类似的url:
icap://icap.myorganization.com/place懔banners
pyicap框架将解析此url,确定要调用的icap方法(options、reqmod或respmod),并调用用户(可能)提供的处理程序方法之一。如果icap服务器找不到
处理程序方法,则返回404错误。
通过检查handler对象的特定字段,可以从icap请求中提取各种信息:
*enc_req:封装的请求行,带有3个元素的列表
*enc_req_headers:封装的请求头,列表字典
*enc_res_status:封装的响应状态
*enc_res_header s:封装的响应头
*有_body:true,如果icap请求有body
*service name:服务端点的名称
*封装的:包含"封装的:"头的内容作为dict
*ieof:true,如果read_chunk()遇到ieof块扩展
*命令:当前icap命令
*请求uri:包含icap请求的完整请求uri
*版本:当前icap请求的版本
*预览:无,或预览头中到达的整数
*允许:包含一组允许的()
*icap_response_code:如果调用了set_icap_response
,则包含响应代码。
这意味着
封装的消息不会改变。它遵循allow头,只有当客户端允许这样的响应时,
才发送204不需要自适应。
*cont():向客户端发送icap 100 continue响应。可以
用于请求客户端在预览后继续发送数据。
*read_chunk():从客户端读取块。请注意,此调用会阻塞。如果线路上没有可用数据,并且使用了连接:
保持活动,则会导致服务器挂起。只有在确定最终会有可用的数据时,才应调用此方法。如果返回空字符串,则表示它是最后一个块,不应执行进一步的读取。如果遇到ieof块扩展名,它还将
ieof变量设置为true。
如果封装的消息
完全适合预览,则在预览期间发送此扩展名。如果ieof为true,则continue()不能被
调用。
*set_icap_response(code):设置icap响应
*set_enc_status(stats):设置封装状态行
*set_enc_request(request):设置封装请求行
*set_enc_header(header,value):设置封装头r.多个
调用将导致头被多次发送。这对于cookie:headers来说很有用。
*set_icap_header(header,value):设置icap header。注意,这应该
不能正常使用,因为所有必需的icap头都由框架自动设置
(如istag、enclosed、date、
server等)
*send_头(has_body=false):可以在设置icap和
enclosed头之后使用。参数has_body表示
封装的消息体的存在。
*send_chunk(data):将块写入客户端。空块必须
作为最后一个块写入。必须在发送适当的
头之后发送数据,可以使用send_header()或enc_header()/icap_header()+
send_headers()。两种报头发送方法不能混合。
如果使用send_报头发送数据,必须将has_body参数设置为rly表示是否存在封装的
消息正文。