Для отправки POST-запроса с помощью WinInet в C++ вам понадобится использовать следующие шаги:
1. Подключение библиотеки WinInet
Начните ваш проект с подключения библиотеки WinInet. Для этого включите заголовочный файл <wininet.h> и добавьте ссылку на библиотеку wininet.lib.
2. Инициализация сессии WinInet
Первым делом создайте сессию WinInet с помощью функции InternetOpen(). Эта функция вернет указатель на сессию (HINTERNET), который будет использоваться в последующих действиях.
HINTERNET hInternet = InternetOpen(L"YourAppName", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); if (hInternet == NULL) { // Обработайте ошибку при инициализации сессии }
3. Открытие соединения с сервером
Используйте функцию InternetOpenUrl() для открытия соединения с сервером и создания запроса HTTP.
HINTERNET hConnect = InternetOpenUrl(hInternet, L"https://example.com/api", NULL, 0, INTERNET_FLAG_RELOAD); if (hConnect == NULL) { // Обработайте ошибку при открытии соединения }
4. Установка заголовков запроса
Прежде чем отправить POST-запрос, вы можете установить заголовки запроса с помощью функции HttpAddRequestHeaders().
const wchar_t* headers = L"Content-Type: application/x-www-form-urlencoded"; if (!HttpAddRequestHeaders(hConnect, headers, -1L, HTTP_ADDREQ_FLAG_ADD)) { // Обработайте ошибку при установке заголовков }
5. Отправка POST-запроса
Чтобы отправить POST-запрос, используйте функцию HttpSendRequest(), передав в нее тип запроса (L"POST") и данные запроса.
const wchar_t* postData = L"param1=value1¶m2=value2"; DWORD postDataLength = wcslen(postData) * sizeof(wchar_t); if (!HttpSendRequest(hConnect, NULL, 0, (LPVOID)postData, postDataLength)) { // Обработайте ошибку при отправке запроса }
6. Получение ответа от сервера
Чтобы получить ответ от сервера, вы должны использовать функцию HttpQueryInfo() или InternetReadFile(). Например, чтобы прочитать ответ в буфер, вы можете использовать следующий код:
const int BUFF_SIZE = 4096; wchar_t buffer[BUFF_SIZE]; DWORD bytesRead; do { if (!InternetReadFile(hConnect, buffer, BUFF_SIZE-1, &bytesRead)) { // Обработайте ошибку при чтении ответа } if (bytesRead > 0) { // Обработайте полученные данные buffer[bytesRead / sizeof(wchar_t)] = '