Python fastcgi客户端

rvs*_*rvs 4 python client fastcgi

我正在python上编写一个工具来监控fastcgi应用程序.fastcgi我唯一需要的是加载ping和状态页面(如果失败则返回某种错误).

有很多库(从python-fasctgi绑定到扭曲)似乎能够做到这一点,但是大多数库对于我的目的来说简直太过分了,而且其中许多都会让我产生额外的依赖性,导致一些包装问题.

那么,是否有任何简单的python fastcgi 客户端实现/库,易于安装/打包(转rpm)或小到足以随项目分发.

更新:

感谢agf,我已经能够连接到fastcgi app并发送一些请求.它只不过是标准的php-fpm.但我无法得到任何位置的响应:我正试图从'/ ping',它应该响应200 OK和'pong'在体内.对于我的任何要求,所有我得到的是200 OK响应,空身.

我正在以这种方式提出要求:

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
Run Code Online (Sandbox Code Playgroud)

我还必须在stdin处理中修改flup客户端:

# Transfer wsgi.input to FCGI_STDIN
content_length = int(environ.get('CONTENT_LENGTH') or 0)
s = ''
while True:
    chunk_size = min(content_length, 4096)
    #s = environ['wsgi.input'].read(chunk_size)
    content_length -= len(s)
    rec = Record(FCGI_STDIN, requestId)
    rec.contentData = s
    rec.contentLength = len(s)
    rec.write(sock)

    if not s: break
Run Code Online (Sandbox Code Playgroud)

注意添加s=''而不是s = environ['wsgi.input'].read(chunk_size),这是来自flup的一些wsgi相关内容的一部分.所以它应该发送空stdin.

另外,我修改了flup to return status, headers, result.

我已经检查了响应阅读代码,它看起来很好:fpm确实是空的.我用wirehard检查了网络通信,对我来说似乎很好 - 所有的参数都被转移了.

有任何想法吗?

更新:

问题在于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

agf*_*agf 6

虽然flup主要用作fastcgi 服务器,但它还包括fastcgi客户端.

http://hg.saddi.com/flup-server/file/tip/flup/client/fcgi_app.py

它似乎是一个单独的文件独立实现,没有依赖项.它有许可证.