Отправка пар имя / значение с использованием HttpOpenRequest и HttpSendRequest - PullRequest
0 голосов
/ 02 сентября 2010

Я использую 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();

1 Ответ

0 голосов
/ 04 февраля 2011

Как говорит @Luke, ответ состоит в том, чтобы поместить данные в тело, используя код, подробно описанный в мой другой вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...