На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Oleg2004
  
    > Помогите разобратся с winhttp, работа с API сайта
      Доброго времени суток

      Столкнулся с следуoей проблемой
      Использую либу WINHTTP среда visual studio 2013 expres
      немогу получить ответ от сайта используя его API
      Посылаю GET запрос а мне в ответ приходит html код стартовой страницы

      API сайта
      ExpandedWrap disabled
        altminer.net/api/status

      ответ должен быть

      ExpandedWrap disabled
        {
            "x11": {
                "name": "x11",
                "port": 3533,
                "coins": 10,
                "fees": 1,
                "hashrate": 269473938,
                "workers": 5,
                "estimate_current": "0.00053653",
                "estimate_last24h": "0.00036408",
                "actual_last24h": "0.00035620",
                "hashrate_last24h": 269473000,
                "rental_current": "3.61922463"
            },
         
            ...
        }


      собственно сам код

      ExpandedWrap disabled
        #include <windows.h>
        #include "winhttp.h"
        #include <tchar.h>
        #include <iostream>
         
        std::wstring get_utf16(const std::string &str, int codepage)
        {
            if (str.empty()) return std::wstring();
            int sz = MultiByteToWideChar(codepage, 0, &str[0], (int)str.size(), 0, 0);
            std::wstring res(sz, 0);
            MultiByteToWideChar(codepage, 0, &str[0], (int)str.size(), &res[0], sz);
            return res;
        }
         
        int main()
        {
            DWORD dwSize = 0;
            DWORD dwDownloaded = 0;
            LPSTR pszOutBuffer;
            BOOL bResults = false;
            HINTERNET hSession = NULL,
            
                hConnect = NULL,
                hRequest = NULL;
         
            
            DWORD headersLength = -1;
            wstring sdomain = get_utf16("altminer.net", CP_UTF8);
            wstring surl = get_utf16("/api/status", CP_UTF8);
            wstring additionalH = get_utf16("content-type:application/x-www-form-urlencoded", CP_UTF8);
         
            // Use WinHttpOpen to obtain a session handle.
            hSession = WinHttpOpen(L"WinHTTP Example/1.0",
                WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                WINHTTP_NO_PROXY_NAME,
                WINHTTP_NO_PROXY_BYPASS, 0);
         
            // Specify an HTTPS server.
            if (hSession)
                hConnect = WinHttpConnect(hSession, sdomain.c_str(),
                INTERNET_DEFAULT_HTTPS_PORT, 0);//
         
            // Create an HTTP request handle.
            if (hConnect)
                hRequest = WinHttpOpenRequest(hConnect, L"GET", surl.c_str(),
                NULL, WINHTTP_NO_REFERER,
                WINHTTP_DEFAULT_ACCEPT_TYPES,
                WINHTTP_FLAG_SECURE);
         
            // Send a request.
            if (hRequest)
                bResults = WinHttpSendRequest(hRequest,
                additionalH.c_str(), headersLength,
                NULL, 0,
                0, 0);
         
            // End the request.
            if (bResults)
                bResults = WinHttpReceiveResponse(hRequest, NULL);
         
            // Keep checking for data until there is nothing left.
            if (bResults)
            {
                cout << "results is ok \n\r";
                do
                {
                    // Check for available data.
                    dwSize = 0;
                    if (!WinHttpQueryDataAvailable(hRequest, &dwSize))
                        cout << "Error %d no data.\n", GetLastError();
                    
                    // Allocate space for the buffer.
                    pszOutBuffer = new char[dwSize + 1];
                    if (!pszOutBuffer)
                    {
                        cout << "Out of memory\n";
                        dwSize = 0;
                    }
                    else
                    {
                        // Read the data.
                        ZeroMemory(pszOutBuffer, dwSize + 1);
         
                        if (!WinHttpReadData(hRequest, (LPVOID)pszOutBuffer,
                            dwSize, &dwDownloaded))
                            cout << "Error %d unable read data.\n", GetLastError();
                        
                        else
                        {
                            cout << pszOutBuffer;
                        }
                        // Free the memory allocated to the buffer.
                        delete[] pszOutBuffer;
                    }
                } while (dwSize > 0);
            }
         
            // Report any errors.
            if (!bResults)
                cout << "Error %d unknow error.\n", GetLastError();
            
            // Close any open handles.
            if (hRequest) WinHttpCloseHandle(hRequest);
            if (hConnect) WinHttpCloseHandle(hConnect);
            if (hSession) WinHttpCloseHandle(hSession);
            char  in[256];
            cin >> in;
            return 0;




      Мучаюсь третий день перегуглил кучу статей и тем на разных форумах :wall: ничего не получается
      что делаю не так не пойму Уже и пост запросы с авторизацией посылал и без нее результат одинаковый html код стартовой страницы
      пробовал и другие сайты эффект примерно один и тот же
      пробовал с wininet результат тотже
        ну проблема у вас ясно не с winhttp
        вы сначала curl'ом успешно это страничку получите
        и как разберётесь, почему это не работает:
        ExpandedWrap disabled
          curl https://altminer.net/api/status

        - возвращайтесь к кодингу
          Ясно что ниче не ясно)))
          Попробую curl....
            с curl все заработало))))
            Спасибо за совет
            фух)))

            Добавлено
            но всеравно интересно что ж не так делал с winhttp
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script Execution time: 0,1174 ]   [ 15 queries used ]   [ Generated: 22.08.19, 11:27 GMT ]