C/C++ HTTP POST с использованием WinINet/WinHttpC++

Программы на C++. Форум разработчиков
Ответить
Гость
 C/C++ HTTP POST с использованием WinINet/WinHttp

Сообщение Гость »


Я пытаюсь отправить HTTP-запрос на публикацию по URL-адресу (например, http://example.com/info.php) с некоторыми пользовательскими переменными POST и вернуть то, что возвращает сайт.

Я несколько раз пытался создать правильную функцию, но каждый раз это приводило к ошибке, то же самое происходило и с кодом, найденным в Интернете: либо он не работал, либо неправильно возвращал ответ сайта, либо не отправлял данные сообщения запроса.

Есть ли у кого-нибудь работающая функция для этого, использующая WinHttp/WinINet?

Можете ли вы подробно объяснить, как это работает?

Мой код:
char* send_post_request(const char* url, const char* action) { HINTERNET hInternet = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); если (hInternet == NULL) { вернуть НУЛЬ; } ХИНТЕРНЕТ hRequest = HttpOpenRequestA( hInternet, "POST", URL, NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0); если (hRequest == NULL) { InternetCloseHandle(hInternet); вернуть НУЛЬ; } HttpAddRequestHeadersA(hRequest, «Тип контента: application/x-www-form-urlencoded», -1, HTTP_ADDREQ_FLAG_ADD); HttpAddRequestHeadersA(hRequest, string("Content-Length: %d" + strlen(action)).c_str(), -1, HTTP_ADDREQ_FLAG_ADD); BOOL успех = HttpSendRequestA (hRequest, NULL, 0, NULL, 0); если (!успех) { InternetCloseHandle(hRequest); InternetCloseHandle(hInternet); вернуть НУЛЬ; } DWORD байт_получено; символьный ответ[1024]; успех = InternetReadFile (hRequest, ответ, sizeof (ответ), &bytes_received); если (!успех) { InternetCloseHandle(hRequest); InternetCloseHandle(hInternet); вернуть НУЛЬ; } InternetCloseHandle(hRequest); InternetCloseHandle(hInternet); обратный ответ; }```
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»