我正在编写一个python工具来监视fastcgi应用程序。我只需要从fastcgi加载ping和状态页(如果失败则返回某种错误)。在
有很多库(从python-fasctgi绑定到twisted)似乎都能做到这一点,但大多数库对我来说都太过了,而且它们中的许多库会给我带来额外的依赖关系,从而导致一些打包问题。在
那么,有没有简单的python fastcgiclient实现/库,这些实现/库很容易安装/打包(到rpm),或者小到足以与项目一起分发。在
更新:
多亏了agf,我能够连接到fastcgi应用程序并向其发送某种请求。它只不过是标准的php fpm。但我无法得到任何位置的响应:我正在尝试从'/ping',它应该以200 OK和'pong'作为响应。我得到的只是200个好的回复,我的任何请求都是空的。在
我的请求是这样的:
def _load_page(self, url):
""" load fastcgi page """
fcgi = fcgi_client.FCGIApp(host = self.fcgi_host, port = self.fcgi_port)
env = {
'SCRIPT_FILENAME': url,
'QUERY_STRING': url,
'REQUEST_METHOD': 'GET',
'SCRIPT_NAME': url,
'REQUEST_URI': url,
'GATEWAY_INTERFACE': 'CGI/1.1',
'SERVER_SOFTWARE': 'ztc',
'REDIRECT_STATUS': '200',
'CONTENT_TYPE': '',
'CONTENT_LENGTH': '0',
'DOCUMENT_URI': url,
'DOCUMENT_ROOT': '/',
#'SERVER_PROTOCOL' : ???
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '123',
'SERVER_ADDR': self.fcgi_host,
'SERVER_PORT': str(self.fcgi_port),
'SERVER_NAME': self.fcgi_host
}
ret = fcgi(env)
print ret
我还不得不在stdin处理中修改flup client:
^{pr2}$注意添加了s=''
,而不是{
另外,我已经将flup修改为return status, headers, result
。在
我检查了响应读取代码,似乎没什么问题:fpm中确实有空的主体。我检查了wireshard的网络通信,对我来说没问题-所有的参数都在传输中。在
有什么想法吗?在
更新:
问题在于fastcgi param过滤函数:它过滤掉了很多有用的参数,比如DOCUMENT_ROOT、SCRIPT_FILENAME等等。禁用此功能后,一切正常。在
对于感兴趣的人,这里是修改后的客户端:https://bitbucket.org/rvs/ztc/src/6ec59525156d/src/ztc/lib/flup_fcgi_client.py,下面是使用示例:https://bitbucket.org/rvs/ztc/src/6ec59525156d/src/ztc/php/fpm.py
尽管
flup
主要用作fastcgi服务器,但它还包括一个fastcgi客户端。在http://hg.saddi.com/flup-server/file/tip/flup/client/fcgi_app.py
它似乎是一个没有依赖关系的单文件独立实现。它有许可证。在
相关问题 更多 >
编程相关推荐