剛剛接觸MFC,感覺代碼可讀性不高,想寫一個MFC程式,通過按鍵獲取網址例如http://baidu.com上面的圖片并顯示出來,百度搜索了很久,感覺都很復雜,有沒有可以直接呼叫的庫或者函式?
CInternetSession mysession;
CHttpConnection *myconn = mysession.GetHttpConnection(L"http://www.baidu.com");
CHttpFile *myfile = myconn->OpenRequest(L"GET", L"/index.html");
myfile->SendRequest();
CString mystr;
CString tmp;
while (myfile->ReadString(tmp))
{
mystr += tmp;
}
myfile->Close();
myconn->Close();
mysession.Close();
delete myfile;
delete myconn;
myfile = 0;
myconn = 0;
uj5u.com熱心網友回復:
希望有原始碼或者寫好的程式借鑒,謝謝大家uj5u.com熱心網友回復:
百度搜“curl”uj5u.com熱心網友回復:
呼叫wininet相關api下載圖片到本地或者 記憶體然后再加載顯示出來.
分別百度相關知識, 拆開來就簡單了.
先找如何使用wininet api 下載網路圖片
然后再找如何加載本地圖片顯示 .
uj5u.com熱心網友回復:
MFC沒那么多現成的東西很多功能都要自己設計實作
uj5u.com熱心網友回復:
UrlDownloadToFile
木馬的最愛,一句話下載然后WinExec 執行。
你要mfc顯示,則要用gdi+
uj5u.com熱心網友回復:
第一步:發出HTTP請求獲取回傳的HTML頁面代碼,這步估計你已經做好了。第二步:決議回傳的HTML代碼,提取出<img>標簽的src屬性,屬性值就是圖片的URL了,如果這個URL是絕對路徑,再次發起HTTP請求去獲取這張圖片,回傳的是圖片的原始資料,你直接存入檔案就得到圖片了,如果是相對路徑,也就是不是已HTTP開頭的URL,這個時候你需要自己觀察HTML原始碼,把主目錄的URL提取出來,然后再加上圖片URL才是絕對路徑URL
關于網頁<img>標簽的提取以及它的src屬性的獲取,你可以自己寫代碼去提取,鑒于你可能初學,你可以用現成的HTML決議庫,這里推薦google的gumbo-parser
利于這個庫列舉所有<img>標簽并獲取src屬性值。這個庫可在github上下載。
uj5u.com熱心網友回復:
謝謝大家的回復!我用下面的代碼,獲取的資料為什么messagebox顯示的是亂碼?CString HttpGet(CString strUrl)
{
CString strResult;
CInternetSession session(NULL, 0);
CHttpFile* pHTTPFile = NULL;
if (pHTTPFile = (CHttpFile*)session.OpenURL(strUrl))
{
CString strText;
while (pHTTPFile->ReadString(strText))
strResult += strText + _T("\r\n");
pHTTPFile->Close();
delete pHTTPFile;
}
return strResult;
}
uj5u.com熱心網友回復:

#include "resource.h"
#include "stdafx.h"
#include<windows.h>
#include<wininet.h>
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"kernel32.lib")
void Entry();
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int ret=URLDownloadToFile(NULL,"http://www.google.cn/intl/zh-CN/images/logo_cn.gif",
"c:\\logo.gif",0,NULL);
if (ret==S_OK) //如果下載成功
{
MessageBox(NULL, "okok", "OK", MB_OK);
}
Entry();
return 0;
}
void Entry()
{
HINTERNET hSession=InternetOpen(NULL,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
HINTERNET hConnection=InternetOpenUrl(hSession,"http://www.google.com",NULL,0,0,0);
BYTE Buffer[4096];
DWORD Read=0,i;
HANDLE hFile=CreateFile("c:\\index.htm",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
InternetReadFile(hConnection,Buffer,sizeof(Buffer),&Read);
while(Read!=0)
{
WriteFile(hFile,Buffer,Read,&i,NULL);
InternetReadFile(hConnection,Buffer,sizeof(Buffer),&Read);
}
CloseHandle(hFile);
InternetCloseHandle(hConnection);
InternetCloseHandle(hSession);
}
兩種方法 可以下載任何東西了。
uj5u.com熱心網友回復:
現在的網頁大多都是UTF8編碼的,所以你下載到的HTML字串是UTF8編碼的,MessageBox只能顯現ANSI和Unicode編碼,如要顯示正確字串請自行轉碼,給你一個轉碼代碼:LPCSTR UIAsset::UTF8ToANSI(LPCSTR utf8)
{
int nLen = ::MultiByteToWideChar(CP_UTF8, NULL, utf8, strlen(utf8), NULL, 0);
wchar_t* ucs = new wchar_t[nLen + 1];
::MultiByteToWideChar(CP_UTF8, NULL, utf8, strlen(utf8), ucs, nLen);
ucs[nLen] = '\0';
nLen = ::WideCharToMultiByte(CP_ACP, NULL, ucs, wcslen(ucs), NULL, 0, NULL, NULL);
char* ansi = new char[nLen + 1];
::WideCharToMultiByte(CP_ACP, NULL, ucs, wcslen(ucs), ansi, nLen, NULL, NULL);
ansi[nLen] = '\0';
delete[] ucs;
return ansi;
}
LPCWSTR UTF8ToUCS(LPCSTR utf8)
{
int nLen = ::MultiByteToWideChar(CP_UTF8, NULL, utf8, strlen(utf8), NULL, 0);
wchar_t* ucs = new wchar_t[nLen + 1];
::MultiByteToWideChar(CP_UTF8, NULL, utf8, strlen(utf8), ucs, nLen);
ucs[nLen] = '\0';
return ucs;
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
我想向一個網址post資料并且獲得他的回傳結果,請問大家有什么可用的代碼么???加到100分也可以!謝謝大家啦!!!
uj5u.com熱心網友回復:
真建議你用libcurl來做了,winhttp用起來太麻煩
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/84198.html
標籤:網絡編程
上一篇:WEBBROWSER的一個問題
下一篇:混編匯編轉c++
