Python fastcgi clien

2024-07-05 11:48:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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中一些与wsgi相关的内容的一部分。所以它应该发送空的stdin。在

另外,我已经将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


Tags: selfsrcclient应用程序hosturlserverport