Иногда для тестирования нужен легковесный веб сервер, функционал httpd или даже lighthttpd будет избыточен. Для таких целей подойдет самодельный веб сервер: сразу после отправки ответа на запрос происходит выход.
Данная версия помогла мне в случае, когда надо было имитировать обрыв ответа. Сервер посылает длину ответа 2000 в заголовке, но ответ заметно короче. Скомпилированный бинарник использовался под линуксом.
При желании функционал можно без труда нарастить: передача в заголовке значения их командной строки, чтение из файла и пр.
#include #include #include #include #include #include #include #include #define BUF_SIZE 2048 #define response_code "HTTP/1.0 200 OK\r\n" #define SERVER "Server: Dynamic Thread\r\n" #define CONTENT_TYPE "Content-Type: text/html\r\n" #define CONTENT_LENGTH "Content-Length: 2000\r\n" int main(int argc, char ** argv) { int sock, newsock, port, clen; char buf[BUF_SIZE]; struct sockaddr_in serv_addr, cli_addr; if (argc < 2) { fprintf(stderr,"usage: %s \n", argv[0]); return EXIT_FAILURE; } sock = socket(AF_INET, SOCK_STREAM, 0); if (socket < 0) { printf("socket() failed: %d\n", errno); return EXIT_FAILURE; } memset((char *) &serv_addr, 0, sizeof(serv_addr)); port = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(port); if (bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { printf("bind() failed: %d\n", errno); return EXIT_FAILURE; } listen(sock, 1); clen = sizeof(cli_addr); newsock = accept(sock, (struct sockaddr *) &cli_addr, (socklen_t*) &clen); if (newsock < 0) { printf("accept() failed: %d\n", errno); return EXIT_FAILURE; } memset(buf, 0, BUF_SIZE); read(newsock, buf, BUF_SIZE-1); buf[BUF_SIZE] = 0; printf("MSG: %s\n", buf); //Send HTTP Response line by line char buffer[BUF_SIZE]; strcpy(buffer, response_code); write(newsock, buffer, strlen(buffer)); strcpy(buffer, SERVER); write(newsock, buffer, strlen(buffer)); strcpy(buffer, CONTENT_TYPE); write(newsock, buffer, strlen(buffer)); strcpy(buffer, CONTENT_LENGTH); write(newsock, buffer, strlen(buffer)); strcpy(buffer, "Last-Modified: Tue, 17 Apr 2012 14:32:04 GMT\r\n"); write(newsock, buffer, strlen(buffer)); strcpy(buffer, "Keep-Alive: timeout=15, max=50\r\n"); write(newsock, buffer, strlen(buffer)); strcpy(buffer, "Connection: Keep-Alive\r\n"); write(newsock, buffer, strlen(buffer)); strcpy(buffer, "\r\n"); write(newsock, buffer, strlen(buffer)); strcpy(buffer, "Connection was terminated - socket was closed"); write(newsock, buffer, strlen(buffer)); close(newsock); close(sock); } |
Вордпресс продолжает портить разметку, корректный исходник тут: https://outofrange.ru/wp-content/uploads/2021/01/web_server.zip