Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.175] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток
Столкнулся с следуoей проблемой Использую либу WINHTTP среда visual studio 2013 expres немогу получить ответ от сайта используя его API Посылаю GET запрос а мне в ответ приходит html код стартовой страницы API сайта altminer.net/api/status ответ должен быть { "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" }, ... } собственно сам код #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; Мучаюсь третий день перегуглил кучу статей и тем на разных форумах ничего не получается что делаю не так не пойму Уже и пост запросы с авторизацией посылал и без нее результат одинаковый html код стартовой страницы пробовал и другие сайты эффект примерно один и тот же пробовал с wininet результат тотже |
Сообщ.
#2
,
|
|
|
ну проблема у вас ясно не с winhttp
вы сначала curl'ом успешно это страничку получите и как разберётесь, почему это не работает: curl https://altminer.net/api/status - возвращайтесь к кодингу |
Сообщ.
#3
,
|
|
|
Ясно что ниче не ясно)))
Попробую curl.... |
Сообщ.
#4
,
|
|
|
с curl все заработало))))
Спасибо за совет фух))) Добавлено но всеравно интересно что ж не так делал с winhttp |