POST JSON через HttpSendRequest в С++
- Отправляю запрос POST, с JSON в заголовке.
- Подключение к серверу проходит.
- Сервер мне возвращает массив JSON, который должен вернуть в ответ на подключение.
- Но переданных мной данных JSON не видит, т.к. ответ JSON и ошибку не возвращает.
~
HINTERNET hOpenHandle, hResourceHandle, hConnectHandle;
hOpenHandle = InternetOpenA("Terminal", INTERNET_OPEN_TYPE_DIRECT, NULL,
NULL);
if (hOpenHandle)
{
hConnectHandle = InternetConnectA(hOpenHandle, "api-demo.exante.eu",
INTERNET_DEFAULT_HTTP_PORT, "a0bf5e14-d039-451b-a2ea-fc5cf778f7da",
"kdyM5ITrvaMDie5YVrTi", INTERNET_SERVICE_HTTP, 0, 0);
if (hConnectHandle)
{
PCTSTR appData[] = { _T("application/json"),NULL };
hResourceHandle = HttpOpenRequestA(hConnectHandle, _T("POST"),
_T("/trade/2.0/orders"), NULL, NULL, appData,
INTERNET_FLAG_RELOAD, 1);
TCHAR postHead[46] =
"Content-Type:application/json;charset=utf-8\r\n";
TCHAR postData[137] =
"{\"instrument\":\"AAPL.NASDAQ\",\"orderType\":\"stop\",
\"side\":\"buy\",\"stopPrice\":\"130\",\"quantity\":\"6\",
\"duration\":\"day\",\"accountId\":\"MIA4198.001\"}";
//На этом этапе возникает проблема, до этого я ошибок не вижу:
HttpSendRequestA(hResourceHandle, postHead, 45, postData, 136);
//Далее вывожу сообщение об ответе. Respons должен быть 201 в случае
//успеха, либо 400, 500 в случае ошибки. Возвращает 0.
char StatusCode[30] ="";
DWORD StatusCodeLen = sizeof(StatusCode);
HttpQueryInfo(hResourceHandle, HTTP_QUERY_STATUS_CODE , &StatusCode,
&StatusCodeLen, NULL);
MessageBox(NULL, StatusCode, "Responce=201?!", MB_OK);
//Получаю в ответ от сервера JSON.
//Но это ответ на запрос api-demo.exante.eu/trade/2.0/orders.
//Ответ на передачу мной JSON серверу должен быть другой и начинаться с
//{ "orderParameters": {"instrument": .....
InternetReadFile(hResourceHandle, szData, sizeof(szData) - 1,
&dwBytesRead);
DWORD dwBytesRead = 1024;
TCHAR szData[1024] = "";
szData[dwBytesRead];
MessageBox(NULL, szData, "szData", MB_OK);
szData[0] = 0;
postData[0] = 0;
dwBytesRead = 0;
InternetCloseHandle(hResourceHandle);
InternetCloseHandle(hConnectHandle);
}
InternetCloseHandle(hOpenHandle);
}
~
В чем может быть причина? Могу-ли я передавать JSON открытым текстом или должен его упаковать? Опыта у меня 0 из 10. Документация API по этому примеру: https://api-live.exante.eu/api-docs/#operation/placeOrder Заранее спасибо.
Fiddler показывает такое, но как это трактовать я не знаю.

Ответы (1 шт):
Вопрос решен, всем спасибо. Следующие строки должны выглядеть так:
hConnectHandle = InternetConnectA(hOpenHandle, "api-demo.exante.eu", INTERNET_DEFAULT_HTTPS_PORT, "a0bf5e14-d039-451b-a2ea-fc5cf778f7da", "kdyM5ITrvaMDie5YVrTi", INTERNET_SERVICE_HTTP, 0, 0); hResourceHandle = HttpOpenRequestA(hConnectHandle, _T("POST"), _T("/trade/2.0/orders"), HTTP_VERSION, NULL, NULL, INTERNET_FLAG_SECURE, 0);