0

我正在尝试通过 unix 套接字连接到我的测试 fcgi 应用程序。服务器非常简单,取自烧瓶文档http://flask.pocoo.org/docs/0.10/deploying/fastcgi/

客户端代码是我的。我希望通过socket.sendand 发送示例 HTTP 请求,并接收带有“Hello World”的 HTTP 响应。问题是客户端挂断了s.recv(1024),没有任何反应。

服务器代码:

def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!\n']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp, bindAddress="fcgi.sock").run()

客户端代码:

# -*- coding: utf-8 -*-
import socket

req = """GET / HTTP/1.1
Host: localhost\r\n\r\n"""

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.settimeout(1.0)

s.connect("fcgi.sock")
s.send(req)

data = s.recv(1024)
s.close()

print('Received ' + repr(data))

我测试通过 nginx 获得响应,它运行良好,但我无法使用套接字执行此操作。有谁知道我的客户端代码有什么问题?

4

1 回答 1

2

如果有人感兴趣,我想出了问题所在。

认为 FCGI 服务器会接收原始 HTTP 请求字符串并正确响应它是幼稚的。FCGI 服务器不是为处理 HTTP 而设计的,它是为 FCGI 请求而设计的,它有其他格式: http: //www.mit.edu/~yandros/doc/specs/fcgi-spec.html

这就是它挂起的原因recv——服务器根本无法响应这种类型的请求。

python Flup 包中有 fcgi 客户端。如果您想测试您的 fcgi 应用程序,您可以使用它。

于 2016-04-28T15:42:46.633 回答