Unc3nZureD Posted April 7, 2014 Share Posted April 7, 2014 I'm working on a DLL which should read a really simple string from a website. The link looks like this: http://genericwebsite.cu.cc/script.php?license=123 The text it prints out is a simple true or false, no more. How could I do this? I'm really newbie in C++ I'm using VC++ 2013 (express) Link to comment Share on other sites More sharing options...
Unc3nZureD Posted April 9, 2014 Author Share Posted April 9, 2014 Could anyone answer me please? Link to comment Share on other sites More sharing options...
funkey Posted April 9, 2014 Share Posted April 9, 2014 Maybe this helps: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385103(v=vs.85).aspx Search for examples. Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning. Link to comment Share on other sites More sharing options...
Unc3nZureD Posted April 9, 2014 Author Share Posted April 9, 2014 Oh, cool, that's what I need Thanks. Link to comment Share on other sites More sharing options...
funkey Posted April 9, 2014 Share Posted April 9, 2014 (edited) I'm glad I could help you. For all others interested in this I wrote the following function. Have fun! expandcollapse popup#include <Windows.h> #include <tchar.h> #include <Wininet.h> #pragma comment(lib,"Wininet.lib") BOOL InetRead(const TCHAR* sUrl, char* buffer, DWORD* dwBufLen, TCHAR* sProxy = NULL, TCHAR* sProxyUser = NULL, TCHAR* sProxyPwd = NULL); BOOL InetRead(const TCHAR* sUrl, char* buffer, DWORD* dwBufLen, TCHAR* sProxy, TCHAR* sProxyUser, TCHAR* sProxyPwd) { HINTERNET hOpen = NULL; HINTERNET hFile = NULL; DWORD dwBytesRead = 0, dwAllBytesRead = 0; DWORD dwCode, dwParamLen = 4; TCHAR* agent = _T("AutoC"); hOpen = InternetOpen(agent, INTERNET_OPEN_TYPE_PRECONFIG, sProxy, NULL, 0); if (!hOpen) goto err1; hFile = InternetOpenUrl(hOpen, sUrl, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, NULL); if (!hFile) goto err2; HttpSendRequest(hFile, NULL, 0, NULL, 0); HttpQueryInfo(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwParamLen, NULL); if (dwCode == HTTP_STATUS_PROXY_AUTH_REQ) { if ((sProxy != NULL) && (sProxyUser != NULL) && (sProxyPwd != NULL)) { InternetSetOption(hFile, INTERNET_OPTION_PROXY_USERNAME, (LPVOID)sProxyUser, lstrlen(sProxyUser)); InternetSetOption(hFile, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)sProxyPwd, lstrlen(sProxyPwd)); HttpSendRequest(hFile, NULL, 0, NULL, 0); HttpQueryInfo(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwParamLen, NULL); } else goto err3; } do { InternetReadFile(hFile, (LPVOID)(buffer + dwAllBytesRead), *dwBufLen - dwAllBytesRead - 1, &dwBytesRead); dwAllBytesRead += dwBytesRead; } while ((dwBytesRead) && (dwAllBytesRead < *dwBufLen)); buffer[dwAllBytesRead] = 0; // because last call of InternetReadFile may add garbage!! goto OK; err3: InternetCloseHandle(hFile); err2: InternetCloseHandle(hOpen); err1: *dwBufLen = 0; return FALSE; OK: InternetCloseHandle(hFile); InternetCloseHandle(hOpen); *dwBufLen = dwAllBytesRead; return TRUE; } int APIENTRY _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { char sBuffer[20000]; DWORD dwBuferLen = sizeof sBuffer; TCHAR *sUrl = _T("http://www.google.com/"); if (!InetRead(sUrl, sBuffer, &dwBuferLen))//, _T("http://proxy.com"), _T("user"), _T("password"))) { MessageBox(NULL, _T("InetRead failed!"), _T("Error"), MB_ICONERROR); return 1; } #ifdef _UNICODE int len = MultiByteToWideChar(CP_ACP, 0, sBuffer, -1, NULL, 0); wchar_t* sNew = (wchar_t*)malloc(len * (sizeof(wchar_t))); MultiByteToWideChar(CP_ACP, 0, sBuffer, -1, sNew, len); sNew[len - 1] = 0; MessageBox(NULL, sNew, sUrl, MB_OK); free(sNew); #else MessageBox(NULL, sBuffer, sUrl, MB_OK); #endif return 0; } Edit: Added proxy authentication Edited April 10, 2014 by funkey Unc3nZureD 1 Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning. Link to comment Share on other sites More sharing options...
funkey Posted April 10, 2014 Share Posted April 10, 2014 I tried the AutoIt function InetRead and I'm not sure if this is a bug. In AutoIt I have following code: HTTpSetProxy(2, "192.168.100.201", "user", "password") Global $bData = InetRead("http://www.google.com/") Global $nBytesRead = @extended If @error Then ConsoleWrite("Error InetRead " & @error & @LF) Global $sData = BinaryToString($bData) MsgBox(4096, "InetRead AutoIt", "Bytes read: " & $nBytesRead & " - " & StringLen($sData) & @CRLF & @CRLF & $sData) This seems to work but I get code from proxy page not from Google. If I add correct port to the proxy address ("192.168.100:3128") then I get about 12000 bytes read but not text and error is set to 13. What does this mean? When I do the same with my C-function I always get text from the Google page, no need to specify the proxy port. char sBuffer[20000]; DWORD dwBufferLen = sizeof sBuffer; TCHAR *sUrl = _T("http://www.google.com/"); if (!InetRead(sUrl, sBuffer, &dwBuferLen, _T("192.168.100.201"), _T("user"), _T("password"))) { MessageBox(NULL, _T("InetRead failed!"), _T("InetRead AutoC"), MB_ICONERROR); return 1; } TCHAR sBytes[64]; _stprintf_s(sBytes, _T("Bytes read: %i"), dwBufferLen); // 11584 bytes now MessageBox(NULL, sBytes, _T("InetRead AutoC"), MB_ICONINFORMATION); Maybe a dev can have a look into AutoIt's code. Greetings funkey Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now