#include "stdafx.h"
#include "wininet1.h"
#define EXPFUNC __declspec(dllexport)

EXPFUNC bool __stdcall Function1(int argc, char* argv[])
{
	bool ok = false;

    // инициализируем WinInet
	HINTERNET hInternet = ::InternetOpen(TEXT("Function1"),
										 INTERNET_OPEN_TYPE_PRECONFIG,
										 NULL,NULL,
										 0);

    if (hInternet != NULL) {
        // открываем HTTP сессию
        HINTERNET hConnect = ::InternetConnect(hInternet,
											   TEXT("http://www.site.com/page1.php?par1=abc&par2=argc"),
											   INTERNET_DEFAULT_HTTP_PORT,  // HTTP, HTTPS, FTP, GOPHER, SOCKS, PORT_NUMBER
											   NULL,NULL,					// логин, пароль
											   INTERNET_SERVICE_HTTP,		// тип сервера HTTP, FTP, GOPHER
											   0,
											   0);

        if (hConnect != NULL) {
            // открываем запрос
            HINTERNET hRequest = ::HttpOpenRequest(hConnect,
												   TEXT("GET"),
												   TEXT("object1.asp"), // имя целевого объекта, (файл, скрипт, модуль)
												   NULL,
												   NULL,
												   0,
												   INTERNET_FLAG_KEEP_CONNECTION,
												   0);

            if (hRequest != NULL) {
                // посылаем запрос
                BOOL bSend = ::HttpSendRequest(hRequest, 
											   TEXT("Text"),	// дополнительные заголовки
											   4,				// количесиво букв заголовков
											   argv,			// указатель на данные
											   sizeof(argv)-1); 
                if (bSend) {
                    // создаём выходной файл
                    HANDLE hFile = ::CreateFile(TEXT("data.txt"), 
												GENERIC_READ|GENERIC_WRITE,
 												FILE_SHARE_READ, 
												NULL, 
												CREATE_ALWAYS, 
												FILE_ATTRIBUTE_NORMAL, 
												NULL);
                    if (hFile) 
						for (;;) {
							// читаем данные
							char  szData[4096];
							DWORD dwBytesRead, dwBytesWritten;
                        
							BOOL bRead = ::InternetReadFile(hRequest,
															szData, 
															sizeof(szData)-1, 
															&dwBytesRead); 

							// выход из цикла при ошибке или завершении
							if (bRead == FALSE  ||  dwBytesRead == 0) break;

							// сохраняем результат
							szData[dwBytesRead] = 0;

							WriteFile(hFile, 
									  szData, 
									  dwBytesRead, 
									  &dwBytesWritten, 
									  NULL); 

							ok = true;
						}
				}
				::InternetCloseHandle(hRequest);	// закрываем запрос
			}
			::InternetCloseHandle(hConnect);	// закрываем сессию
		}
		::InternetCloseHandle(hInternet);	// закрываем WinInet
	}
    
    return ok;
}
