Code:
#include <windows.h>
#include <wininet.h>
#include <iostream>
using namespace::std;
typedef void* (WINAPI * TypeInternetOpen) (char*,DWORD,DWORD,DWORD,
DWORD);
typedef void* (WINAPI * TypeInternetOpenUrl) (void*,char*,DWORD,DWORD,
DWORD,DWORD);
typedef void (WINAPI * TypeInternetCloseHandle) (HANDLE);
typedef BOOL (WINAPI * TypeInternetReadFileA) ( HANDLE, LPVOID ,
DWORD ,LPDWORD);
typedef BOOL (WINAPI * TypeHttpSendRequest)(HINTERNET, LPCTSTR,DWORD,LPVOID,DWORD);
typedef BOOL (WINAPI * TypeHttpQueryInfo)( HINTERNET, DWORD, LPVOID, LPDWORD, LPDWORD);
typedef HINTERNET (WINAPI * TypeHttpOpenRequest)( HINTERNET, LPCTSTR , LPCTSTR , LPCTSTR ,
LPCTSTR , LPCTSTR , DWORD , DWORD*);
typedef HINTERNET (WINAPI * TypeInternetConnect)( HINTERNET, LPCTSTR , INTERNET_PORT ,
LPCTSTR , LPCTSTR , DWORD , DWORD ,
DWORD* );
//InternetConnect(),
TypeHttpOpenRequest myHttpOpenRequest;
TypeHttpQueryInfo myHttpQueryInfo;
TypeHttpSendRequest myHttpSendRequest;
TypeInternetConnect myInternetConnect;
TypeInternetOpen myInternetOpen;
TypeInternetOpenUrl myInternetOpenUrl;
TypeInternetReadFileA myInternetReadFileA;
TypeInternetCloseHandle myInternetCloseHandle;
//#pragma comment(lib,"wininet.lib")
int main(){
char Headers[] =
"Content-Type: application/x-www-form-urlencoded";
char frmdata[] =
"name=John+Doe&userid=hithere&other=P%26Q";
DWORD ResponseLength;
HANDLE gHandle = LoadLibrary("wininet");
if(!gHandle)
return 0;
myInternetOpen=(TypeInternetOpen)(DWORD)GetProcAddress((HINSTANCE)gHandle,"InternetOpenA");
myInternetOpenUrl=(TypeInternetOpenUrl)(DWORD)GetProcAddress((HINSTANCE)gHandle,"InternetOpenUrlA");
myInternetCloseHandle=(TypeInternetCloseHandle)(DWORD)GetProcAddress((HINSTANCE)gHandle,"InternetCloseHandle");
myInternetReadFileA=(TypeInternetReadFileA)(DWORD)GetProcAddress((HINSTANCE)gHandle,"InternetReadFile");
myHttpOpenRequest=(TypeHttpOpenRequest)(DWORD)GetProcAddress((HINSTANCE)gHandle,"HttpOpenRequestA");
myHttpQueryInfo=(TypeHttpQueryInfo)(DWORD)GetProcAddress((HINSTANCE)gHandle,"HttpQueryInfoA");
myHttpSendRequest=(TypeHttpSendRequest)(DWORD)GetProcAddress((HINSTANCE)gHandle,"HttpSendRequestA");
myInternetConnect=(TypeInternetConnect)(DWORD)GetProcAddress((HINSTANCE)gHandle,"InternetConnectA");
if(!myInternetOpen || !myInternetOpenUrl
|| !myInternetCloseHandle || !myInternetReadFileA)
return 0;
while(1){
HINTERNET hSession = myInternetOpen("MyAgent",
INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(hSession==NULL)
{
cout<<"ieopen fail"<<endl;
return 0;
}
HINTERNET hConnect = myInternetConnect(hSession,"localhost",
INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,
INTERNET_SERVICE_HTTP,0,0);
if(hConnect==NULL)
{
cout<<"iconnect"<<endl;
return 0;
}
HINTERNET hRequest = myHttpOpenRequest(hConnect, "POST",
"/search?q=me", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
if(hRequest==NULL)
{
cout<<"httpopenReq"<<endl;
return 0;
}
myHttpSendRequest(hRequest, Headers, strlen( Headers), frmdata, strlen(frmdata));
DWORD dwContentLen;
DWORD dwBufLen = sizeof(dwContentLen);
if(myHttpQueryInfo(hRequest,
HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
(LPVOID)&dwContentLen, //Address of the buffer that receives the information
&dwBufLen, //Address of a value that contains the length of the data buffer
0))
{
// You have a content length so you can calculate percent complete
char *pData = (char*)GlobalAlloc(GMEM_FIXED, dwContentLen + 1);
DWORD dwReadSize = dwContentLen;
DWORD dwBytesRead;
myInternetReadFileA(hRequest, pData, dwReadSize, &dwBytesRead);
// Null terminate data
pData[dwContentLen] = 0;
// Display
cout << pData;
}
else
{
DWORD err = GetLastError();
// No content length...
// Just read until we are done.
char pData[100];
DWORD dwBytesRead = 1;
while (dwBytesRead)
{
myInternetReadFileA(hRequest, pData, 99, &dwBytesRead);
pData[dwBytesRead] = 0;
cout << pData;
}
}
Sleep(1000);
}
}