See More

// 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; }