Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2020, 08:49   #1
beruk
Пользователь
 
Регистрация: 20.10.2020
Сообщений: 13
По умолчанию POST JSON через HttpSendRequest в С++

1. Отправляю запрос POST, с JSON в заголовке.
2. Подключение к серверу проходит.
3. Сервер мне возвращает массив JSON, который должен вернуть в ответ на подключение.
4. Но переданных мной данных 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/...ion/placeOrder
Заранее спасибо.

Последний раз редактировалось beruk; 23.10.2020 в 10:37.
beruk вне форума Ответить с цитированием
Старый 23.10.2020, 09:16   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Что возвращают HttpSendRequestA и HttpSendRequestA?
Ознакомьтесь с документацией этих функций и как надо трактовать их результаты.
waleri вне форума Ответить с цитированием
Старый 23.10.2020, 09:53   #3
beruk
Пользователь
 
Регистрация: 20.10.2020
Сообщений: 13
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Что возвращают HttpSendRequestA и HttpSendRequestA?
Здесь видимо опечатка?

HttpOpenRequestA возвращает true и ошибку 0.

Последний раз редактировалось beruk; 23.10.2020 в 10:36.
beruk вне форума Ответить с цитированием
Старый 23.10.2020, 12:26   #4
beruk
Пользователь
 
Регистрация: 20.10.2020
Сообщений: 13
По умолчанию

Fiddler 4 показывает такое, но как это трактовать я не знаю.
Screenshot_2.jpg
beruk вне форума Ответить с цитированием
Старый 23.10.2020, 13:15   #5
beruk
Пользователь
 
Регистрация: 20.10.2020
Сообщений: 13
По умолчанию

Вопрос решен, всем спасибо.
Следующие строки должны выглядеть так:

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);
beruk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
POST запрос в JSON формате investr777 Java Базы данных (JDBC, JPA, Hibernate) 2 18.12.2018 18:48
POST JSON brownb Фриланс 2 05.06.2017 22:11
POST JSON в ответ тишина) brownb Общие вопросы Delphi 1 03.06.2017 10:12
Приём и обработка JSON в POST Anarchist666 ASP.NET 1 01.07.2013 14:20
php POST json kos1nus PHP 1 16.08.2011 16:10