Как сделать HTTP запрос в C++?
Всем привет! Подскажите, пожалуйста, как правильно сделать HTTP-запрос (GET/POST) на чистом C++ без использования сторонних библиотек вроде Boost.Beast или cURL? Пишу небольшой консольный клиент для работы с REST API, но не могу найти встроенных средств для работы с HTTP.
Пробовал использовать winsock2 на Windows и sys/socket.h на Linux, но столкнулся с проблемами: во-первых, при отправке GET-запроса сервер возвращает ошибку 400 Bad Request, во-вторых, не получается корректно обработать chunked transfer encoding в ответе. Вот пример моего кода:
#ifdef _WIN32
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
#include <iostream>
#include <string>
int main() {
// ... создание сокета и подключение к example.com:80 ...
std::string request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
send(sock, request.c_str(), request.size(), 0);
// ... чтение ответа ...
}Ожидаю, что получу HTML-код страницы example.com, но вместо этого приходит либо пустой ответ, либо ошибка. Может быть, я неправильно формирую HTTP-заголовки? Или нужно использовать специальные флаги при создании сокета?
Буду благодарен за пример рабочего кода с пояснениями. Также интересует, как обрабатывать HTTPS (SSL/TLS) запросы без внешних библиотек — возможно ли это вообще стандартными средствами C++17/20?