gpt4 book ai didi

Python fastcgi 客户端

转载 作者:太空狗 更新时间:2023-10-30 02:49:45 25 4
gpt4 key购买 nike

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

有很多库(从 python-fasctgi 绑定(bind)到 twisted)似乎能够做到这一点,但其中大多数对于我的目的来说都太过分了,其中许多会给我带来额外的依赖,导致一些打包问题。

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

更新:

感谢 agf,我已经能够连接到 fastcgi 应用程序并向它发送某种请求。它只不过是标准的 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

我还必须在 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

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

另外,我修改了 flup 以返回状态、标题、结果

我检查了响应读取代码,它似乎没问题:fpm 确实是空的。我已经检查了与 wireshard 的网络通信,对我来说似乎没问题 - 所有参数都在传输中。

有什么想法吗?

更新:

问题出在 fastcgi 参数过滤功能上:它过滤掉了很多有用的参数,比如 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

它似乎是一个没有依赖关系的单文件独立实现。它有一个宽松的许可证。

关于Python fastcgi 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com