// UseHttp.cpp : ¶¨Òå¿ØÖÆÌ¨Ó¦ÓóÌÐòµÄÈë¿Úµã¡£
//
#include "stdafx.h"
#include "..//IHttp/IHttpInterface.h"
#ifdef _DEBUG
#pragma comment(lib, "../lib/IHttpD.lib")
#else
#pragma comment(lib, "../lib/IHttp.lib")
#endif
#include
#include
bool TestWinInet();
bool TestWinHttp();
bool TestSocketHttp();
bool TestDownloadFile();
//ÏÂÔØÎļþµÄ»Øµ÷À࣬ÏÔʾÏÂÔØ½ø¶È&¿ØÖÆÏÂÔØ
class CMyCallback
: public IHttpCallback
{
public:
virtual void OnDownloadCallback(void* pParam, DownloadState state, double nTotalSize, double nLoadSize)
{
if (nTotalSize>0)
{
int nPercent = (int)( 100*(nLoadSize/nTotalSize) );
printf("ÏÂÔØ½ø¶È£º%d%%\n", nPercent);
}
}
virtual bool IsNeedStop()
{
//Èç¹ûÐèÒªÔÚÍⲿÖÕÖ¹ÏÂÔØ£¬·µ»Øtrue
return false;//¼ÌÐøÏÂÔØ
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//TestWinInet(); //²âÊÔʹÓÃWinInetʵÏÖµÄHTTP½Ó¿Ú
//TestWinHttp(); //²âÊÔʹÓÃWinHttpʵÏÖµÄHTTP½Ó¿Ú
TestSocketHttp(); //²âÊÔʹÓÃSocketʵÏÖµÄHTTP½Ó¿Ú
//TestDownloadFile(); //²âÊÔÏÂÔØÎļþ£¬Ê¹Óûص÷½Ó¿Ú»ñÈ¡ÏÂÔØ½ø¶È
system("pause");
//´òÓ¡³öÄÚ´æÐ¹Â©ÐÅÏ¢
_CrtDumpMemoryLeaks();
return 0;
}
bool TestWinInet()
{
IWininetHttp* pHttp;
bool bRet = CreateInstance((IHttpBase**)&pHttp, TypeWinInet);
if (!bRet)
{
return false;
}
char* pMem = NULL;
int nSize = 0;
const wchar_t* pUrl = L"https://blog.csdn.net/mfcing";
//Ìí¼Ó×Ô¶¨ÒåhttpÍ·ÐÅÏ¢
pHttp->AddHeader("name", "Jelin");
pHttp->AddHeader("address", "Shanghai");
string str = pHttp->Request(pUrl, HttpGet);
if (str.empty())
{
//ÇëÇóʧ°Ü
pHttp->FreeInstance();
return false;
}
if (pHttp->DownloadToMem(pUrl, (void**)&pMem, &nSize))
{//ÏÂÔØµ½ÄÚ´æÖУ¬ÓëÏÂÔØµ½±¾µØÏà±ÈЧÂʸü¸ß£¬²»ÓöÁдÎļþ£¨½öÊÊÓÃÓÚÎļþСÎļþ£©
//ÓÃÍêÖ®ºóÒ»¶¨ÒªÊÍ·ÅÕâ¿éÄÚ´æ¿Õ¼ä
free(pMem);
}
else
{
//ÏÂÔØÊ§°Ü£¬»ñÈ¡´íÎóÐÅÏ¢
DWORD dwCode = GetLastError();
HttpInterfaceError code = pHttp->GetErrorCode();
pHttp->FreeInstance();
return false;
}
//²âÊÔpostÇëÇó
std::string ret = pHttp->Request("https://chat.jelinyao.cn/postTest", HttpPost, "{\"name\":\"Jelin\",\"address\":\"Shanghai\"}");
pHttp->FreeInstance();
return true;
}
bool TestWinHttp()
{
IWinHttp* pHttp;
bool bRet = CreateInstance((IHttpBase**)&pHttp, TypeWinHttp);
if (!bRet)
{
return false;
}
const char* pUrl = "https://www.qq.com";
//Ìí¼Ó×Ô¶¨ÒåhttpÍ·ÐÅÏ¢
pHttp->AddHeader("name", "Jelin");
pHttp->AddHeader("address", "Shanghai");
string strHtml = pHttp->Request(pUrl, HttpGet);
if (strHtml.empty())
{
//ÇëÇóʧ°Ü
pHttp->FreeInstance();
return false;
}
else
{
printf("%s html : %s\n", pUrl, strHtml.c_str());
}
//²âÊÔpostÇëÇó
std::string ret = pHttp->Request("https://chat.jelinyao.cn/postTest", HttpPost, "{\"name\":\"Jelin\",\"address\":\"Shanghai\"}");
pHttp->FreeInstance();
return true;
}
bool TestSocketHttp()
{
//ʹÓÃwinsock֮ǰÐèÒª½øÐгõʼ»¯
InitWSASocket();
ISocketHttp* pHttp;
bool bRet = CreateInstance((IHttpBase**)&pHttp, TypeSocket);
if (!bRet)
{
UninitWSASocket();
return false;
}
const wchar_t* pUrl = L"http://www.hbsrsksy.cn/";
char* pHtml = NULL;
int nSize = 0;
//Ìí¼Ó×Ô¶¨ÒåhttpÍ·ÐÅÏ¢
pHttp->AddHeader("name", "Jelin");
pHttp->AddHeader("address", "Shanghai");
//ÏÂÔØÍøÒ³ÄÚÈݵ½ÄÚ´æÖУ¬¸ÃÄÚ´æÓÉmalloc¶¯Ì¬ÉêÇ룬ʹÓúóÐèÒªÊÖ¶¯ÊÍ·Å
if (!pHttp->DownloadToMem(pUrl, (void**)&pHtml, &nSize))
{
//ÏÂÔØÊ§°Ü
pHttp->FreeInstance();
UninitWSASocket();
return false;
}
printf("html: %s\n", pHtml);
//ÊÍ·ÅÄÚ´æ¿Õ¼ä
free(pHtml);
pHttp->FreeInstance();
UninitWSASocket();
return true;
}
bool TestDownloadFile()
{
IWinHttp* pHttp;
bool bRet = CreateInstance((IHttpBase**)&pHttp, TypeWinHttp);
if (!bRet)
{
return false;
}
CMyCallback cb;
pHttp->SetDownloadCallback(&cb, NULL);
const wchar_t* pUrl = L"https://pm.myapp.com/invc/xfspeed/qqsoftmgr/[email protected]";
const wchar_t* pSavePath = L"c:\\down.exe";
if (!pHttp->DownloadFile(pUrl, pSavePath))
{
//ÏÂÔØÊ§°Ü
DWORD dwCode = GetLastError();
HttpInterfaceError error = pHttp->GetErrorCode();
pHttp->FreeInstance();
return false;
}
pHttp->FreeInstance();
return true;
}