Я использую HttpOpenRequest для отправки данных формы / пути? Data = xyzzy.Однако xyzzy может быть очень большим, иногда по сотням k, и на некоторых машинах HttpOpenRequest завершается с ошибкой 122 (ERROR_INSUFFICIENT_BUFFER)
Согласно Microsoft kb 208427 Максимальная длина URL составляет 2 083 символовInternet Explorer
, но в нем также указано
'Однако метод POST не ограничен размером URL-адреса для отправки пар имя / значение.Эти пары передаются в заголовке, а не в URL-адресе
Ответ на мой вопрос Почему HttpOpenRequest может завершиться с ошибкой 122 , а также из нескольких других источников предполагают, чтоданные должны быть отправлены HttpSendRequest, но это не отправляет данные как часть заголовков и не выбирается как пара имя / значение.
Как я могу отправлять большие объемы данных через http, используяпары имя / значение?
Мой код
std::string fURL = "/path";
std::string payload = "xml=xmldata";
HINTERNET fSessionHandle = InternetOpenW(L"Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET fConnectHandle = InternetConnectW(fSessionHandle, L"172.24.5.42", 8090, NULL, NULL, INTERNET_SERVICE_HTTP, WININET_API_FLAG_SYNC, 0);
HINTERNET fRequestHandle;
LPCSTR types[] = { "application/x-www-form-urlencoded", NULL };
fRequestHandle = HttpOpenRequestA(fConnectHandle, "POST", fURL.c_str(), NULL, NULL, types , INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE, 0);
if (fRequestHandle)
{
if (!HttpSendRequestW(fRequestHandle, NULL, -1, (LPVOID)payload.c_str(), (DWORD)payload.length()))
std::cerr << "HTTP Send Request failed, sys error " << GetLastError();
}
else
std::cerr << "HTTP Open Request failed, sys error " << GetLastError();