如何使用 curl 和 telnet 代替 cgi-fcgi?

如何使用 curl 和 telnet 代替 cgi-fcgi?

我正在使用这个脚本.c:

#include <fcgi_stdio.h>
#include <stdlib.h>
int main (void) {
while (FCGI_Accept() >= 0) {
    printf("Status: 200 OK\r\n");
    printf("Content-type: text/html\r\n\r\n");
    printf("<!doctype><html><body>Welcome!</body></html>\n");
}
return EXIT_SUCCESS;
}

我使用以下方法编译

gcc script.c -o script.fcgi -lfcgi -O3 -Wall -Wextra -pedantic -std=c11

然后,我在终端输入:

 cgi-fcgi -start -connect localhost:9000 script.fcgi
 cgi-fcgi -connect localhost:9000 script.fcgi

并得到输出

Status: 200 OK
Content-type: text/html

<!doctype><html><body>Welcome!</body></html>

之后我使用 curl

 curl localhost:9000
 curl: (52) Empty reply from server

和 telnet

 telnet localhost 9000
 Connected to localhost.
 GET / HTTP/1.1
 Connection closed by foreign host.

为什么我仅使用 cgi-fcgi 即可获得成功结果?如何使用 curl 和 telnet 从脚本获取相同的数据?

答案1

FastCGI 不是 HTTP,这就是 curl 无法工作的原因(至少对于 http(默认)URL 来说无法工作)。

这也是为什么您的 telnet 示例不起作用的原因(因为您正在通过 HTTP 与它通信)。

虽然 curl 确实支持多种协议,但 FastCGI 并不是其中之一。

FastCGI 协议并不是特别简单;它首先是一个二进制协议,旨在连接到 Web 服务器,而不是常规的 HTTP 客户端。

如果您想要一些可以在没有启动和运行 Web 服务器的情况下通过浏览器指向的东西,那么您将需要某种桥接器(这正是 Web 服务器所做的)。保留 cgi-fcgid 以帮助您解决任何 Web 服务器配置问题。

相关内容