HttpSendRequest изменяет мое значение, в то время как HttpSendRequestA работает как исключение - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу отправить значение POST в C ++, используя HttpSendRequest. Я проверяю запросы на https://requestbin.net Я сделал этот код:

void sendValue()
{
    LPCSTR header = "Content-Type: application/x-www-form-urlencoded; charset=utf-8";
    std::string dataStr = u8"result=a very longue value !!!!!!!!!!!!!!!!!!!!!!!!!!!! :)";
    LPVOID myMessage = (LPVOID)dataStr.c_str();
    HINTERNET hInternet = InternetOpenA("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    HINTERNET hConnection = InternetConnectA(hInternet, "requestbin.net", 80, " ", " ", INTERNET_SERVICE_HTTP, 0, 1);
    HINTERNET hRequest = HttpOpenRequestA(hConnection, "POST", "/r/IDREQUESTBIN", NULL, NULL, NULL, 0, 1);
    HttpSendRequestA(hRequest, header, strlen(header), myMessage, dataStr.size());
    std::cout << "wcslen(header) " << strlen(header) << std::endl;
    std::cout << "dataStr.size() " << dataStr.size() << std::endl;
}

Он отлично работает . Я хочу работать с wstring сейчас, я сделал этот код:

void sendValueV2()
{
    LPCWSTR header = L"Content-Type: application/x-www-form-urlencoded; charset=utf-8";
    std::wstring dataStr = L"result=a very longue value !!!!!!!!!!!!!!!!!!!!!!!!!!!! :)";
    LPVOID myMessage = (LPVOID)dataStr.c_str();
    HINTERNET hInternet = InternetOpen(L"InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    HINTERNET hConnection = InternetConnect(hInternet, L"requestbin.net", 80, L" ", L" ", INTERNET_SERVICE_HTTP, 0, 1);
    HINTERNET hRequest = HttpOpenRequest(hConnection, L"POST", L"/r/IDREQUESTBIN", NULL, NULL, NULL, 0, 1);
    HttpSendRequest(hRequest, header, wcslen(header), myMessage, dataStr.size());
    std::wcout << "wcslen(header) " << wcslen(header) << std::endl;
    std::wcout << "dataStr.size() " << dataStr.size() << std::endl;
}

Мое значение POST урезано до: result=a very longue value !!

Это вывод моей консоли:

wcslen(header) 62
dataStr.size() 58
wcslen(header) 62
dataStr.size() 58

Кто-то может объяснить мне, что случилось? Я схожу с ума.

1 Ответ

1 голос
/ 16 апреля 2020

Согласно документации , параметр dwOptional для HttpSendRequest выражается в байтах, а не в символах, поэтому замените:

HttpSendRequest(hRequest, header, wcslen(header), myMessage, dataStr.size());

на:

HttpSendRequest(hRequest, header, wcslen(header), myMessage, dataStr.size() * sizeof (WCHAR));

и ваша проблема должна быть решена.

...