用了MFC的CInternetSession,CHTTPFile和CHTTPConnection类。
#include <afxinet.h>
#include <afxsock.h>
#include <afxstr.h>
#include <iostream>
using namespace std;
int HttpCall(CString ServerAddress,
int ServerPort,
CString Process,
CString Query,
CString DataBlock,
CString &DataOut)
{
CInternetSession* pHttpSession = new CInternetSession("HttpClient");
CString URL = "http://" + ServerAddress;
CString CookieData;
pHttpSession->GetCookie(URL, "", CookieData);
if(CookieData.GetLength() == 0)
{
pHttpSession->SetCookie(URL, "Language", "en");
}
CHttpConnection* pHttpConnection = pHttpSession->GetHttpConnection(ServerAddress, ServerPort, "", "");
CHttpFile* pHttpFile = NULL;
if(Query.GetLength()>0)
{
Process += '?' + Query;
}
TRY
{
DWORD HttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE;
DWORD TotalLen = DataBlock.GetLength();
if( TotalLen > 0)
{
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
Process, NULL, 1, NULL, (LPCTSTR)"1.1", HttpRequestFlags);
}
else
{
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,
Process, NULL, 1, NULL, (LPCTSTR)"1.1", HttpRequestFlags);
}
// Use direct write to posting field!
CString strHeaders = "Accept: text/*\r\n";
strHeaders += "User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; Edition IBIS; zh-cn) Presto/2.10.229 Version/11.64\r\n";
strHeaders += "Accept-Language: en-us\r\n";
strHeaders += "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
pHttpFile->AddRequestHeaders((LPCSTR)strHeaders);
if(TotalLen>0)
{
pHttpFile->SendRequestEx(TotalLen, HSR_INITIATE, 1);
pHttpFile->WriteString((LPCTSTR)DataBlock);
pHttpFile->EndRequest();
}
else
{
pHttpFile->SendRequest();
}
}
CATCH_ALL(e)
{
AfxMessageBox("Connection to Server Failed");
}
END_CATCH_ALL
DWORD dwRet;
pHttpFile->QueryInfoStatusCode(dwRet);
// Read Data
DWORD lread = 1000;
char c[1000] = {0};
while(lread > 0)
{
lread = pHttpFile->Read( c , 1000);
if(lread > 0)
{
DataOut += c;
}
}
pHttpFile->Close();
pHttpConnection->Close();
pHttpSession->Close();
delete pHttpFile;
delete pHttpConnection;
delete pHttpSession;
return dwRet;
}
int main(int argc, char **argv)
{
CString DataOut = "";
HttpCall("192.168.1.1", 80, "/index/login.cgi", "", "Username=admin&Password=YWRtaW4%3D", DataOut);
cout << DataOut << endl;
system("pause");
DataOut = "";
HttpCall("192.168.1.1", 80, "/html/application/setcfg.cgi",
"x=InternetGatewayDevice.WANDevice.2.WANConnectionDevice.1.WANIPConnection.1.X_DMZ&RequestFile=/html/application/dmz.asp",
"x.DMZEnable=true&x.DMZHostIPAddress=192.168.1.123", DataOut);
cout << DataOut << endl;
system("pause");
return 0;
}