Как использовать 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 для получения тех же данных из сценария?

0
задан 5 April 2021 в 21:03
1 ответ

FastCGI - это не HTTP, поэтому curl не работает (по крайней мере, не с URL-адресами http (по умолчанию)).

Вот почему ваш пример telnet не работает (потому что вы говорите с ним по протоколу HTTP).

Хотя curl поддерживает (очень!) Широкий спектр протоколов, FastCGI к ним не относится.

Протокол FastCGI не особо тривиален; Для начала это бинарный протокол, предназначенный для подключения к веб-серверу, а не к обычному HTTP-клиенту.

Если вам нужно что-то, на что вы можете указать в браузере, не имея запущенного и работающего веб-сервера, вам понадобится какой-то мост (что и будет делать веб-сервер). Сохраните cgi-fcgid, чтобы помочь вам устранить любые проблемы с конфигурацией веб-сервера.

1
ответ дан 24 April 2021 в 01:41

Теги

Похожие вопросы