通過(guò)一個(gè)完整的FTP,Gopher或HTTP網(wǎng)址打開(kāi)一個(gè)資源,。 HINTERNET InternetOpenUrl (__in HINTERNET hInternet ,,__in LPCTSTR lpszUrl ,,__in LPCTSTR lpszHeaders ,__in DWORD值dwHeadersLength ,,__in的DWORD dwFlags ,,__in DWORD_PTR dwContext); 參數(shù) hInternet 當(dāng)前的 Internet 會(huì)話句柄。句柄必須由前期的 InternetOpen 調(diào)用返回,。 lpszUrl 一個(gè)空字符結(jié)束的字符串變量的指針,,指定讀取的網(wǎng)址。只有以ftp:, gopher:, http:, 或者 https: 開(kāi)頭的網(wǎng)址被支持,。 lpszHeaders 一個(gè)空字符結(jié)束的字符串變量的指針,,指定發(fā)送到HTTP服務(wù)器的頭信息。欲了解更多信息,,請(qǐng)參閱HttpSendRequest函數(shù)里lpszHeaders參數(shù)的說(shuō)明,。 dwHeadersLength 額外的頭的大小,以TCHAR為單位,。如果這個(gè)參數(shù)是-1L并且lpszHeaders不是NULL,,lpszHeaders被假設(shè)為零終止( ASCIIZ ),而長(zhǎng)度被自動(dòng)計(jì)算,。 dwFlags 此參數(shù)可為下列值之一,。 數(shù)值 說(shuō)明 INTERNET_FLAG_EXISTING_CONNECT 如果使用相同的必須屬性創(chuàng)建會(huì)話,會(huì)嘗試?yán)矛F(xiàn)有的InternetConnect對(duì)象,。這只對(duì)FTP操作非常有用,,因?yàn)镕TP是唯一在同一會(huì)話中執(zhí)行多種操作的協(xié)議。WinINet API 為每個(gè)由InternetOpen產(chǎn)生的HINTERNET句柄緩沖一個(gè)單獨(dú)鏈接句柄,。InternetOpenUrl使用此標(biāo)志的HTTP和FTP連接,。 INTERNET_FLAG_HYPERLINK 當(dāng)決定何時(shí)從網(wǎng)絡(luò)重載時(shí),如果服務(wù)器沒(méi)有返回 Expires time 和 LastModified,,那么強(qiáng)制重載,。
INTERNET_FLAG_IGNORE_CERT_CN_INVALID 停用檢查從服務(wù)器對(duì)必須的主機(jī)名稱返回的SSL/PCT-based證書(shū)。 WinINet函數(shù)使用簡(jiǎn)單的比較匹配主機(jī)名稱和通配符的規(guī)則檢查證書(shū),。
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 停用檢查的SSL/PCT-based的證書(shū)的適當(dāng)?shù)挠行掌凇?
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 禁用檢測(cè)這中特殊的重定向,。當(dāng)使用此標(biāo)志, WinINet 透明允許從HTTPS到HTTP URL的重定向,。
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 禁用檢測(cè)這中特殊的重定向,。當(dāng)使用此標(biāo)志, WinINet 透明的允許的HTTP到HTTPS URL的重定向,。
INTERNET_FLAG_KEEP_CONNECTION 如果可能的話,為連接使用?;钫Z(yǔ)義,。這個(gè)標(biāo)志要求微軟網(wǎng)絡(luò)( MSN ),,NTLM和其他類型的身份驗(yàn)證。
INTERNET_FLAG_NEED_FILE 如果要?jiǎng)?chuàng)建的文件不能被緩存,,創(chuàng)建臨時(shí)文件,。
INTERNET_FLAG_NO_AUTH 不試圖自動(dòng)驗(yàn)證。
INTERNET_FLAG_NO_AUTO_REDIRECT 不自動(dòng)處理HttpSendRequest中的重定向,。
INTERNET_FLAG_NO_CACHE_WRITE 不添加返回實(shí)體到緩存,。
INTERNET_FLAG_NO_COOKIES 不會(huì)自動(dòng)添加的Cookie頭到請(qǐng)求,并且不自動(dòng)添加返回的cookie到cookie數(shù)據(jù)庫(kù),。
INTERNET_FLAG_NO_UI 禁用Cookie的對(duì)話框,。
INTERNET_FLAG_PASSIVE 使用被動(dòng)FTP語(yǔ)義。InternetOpenUrl為FTP的文件和目錄使用此標(biāo)志,。
INTERNET_FLAG_PRAGMA_NOCACHE 即使代理中存在緩存副本,,也強(qiáng)制要求由源服務(wù)器返回。
INTERNET_FLAG_RAW_DATA 檢索的Gopher目錄信息時(shí),,傳回的數(shù)據(jù)作為GOPHER_FIND_DATA結(jié)構(gòu),,如果檢索的FTP目錄信息時(shí),作為一個(gè)WIN32_FIND_DATA結(jié)構(gòu),。如果此標(biāo)志沒(méi)有指定,,或者請(qǐng)求通過(guò)CERN代理創(chuàng)建, InternetOpenUrl返回的HTML版本的目錄,。
INTERNET_FLAG_RELOAD 從原服務(wù)器強(qiáng)制下載所要求的文件,,對(duì)象,或目錄列表,,而不是從緩存下載,。
INTERNET_FLAG_RESYNCHRONIZE 重新加載的HTTP資源,如果資源在最后一次下載后已被修改,。所有FTP和Gopher資源將被重載,。
INTERNET_FLAG_SECURE 使用安全傳輸語(yǔ)義。這次傳輸使用安全套字節(jié)層/專用通信技術(shù)(的SSL / PCT ),,這只有在HTTP請(qǐng)求時(shí)有意義,。
dwContext 一個(gè)指向一個(gè)應(yīng)用程序定義的值,將隨著返回的句柄,,一起傳遞給回調(diào)函數(shù),。
返回值 如果已成功建立到FTP,Gopher,,或HTTP URL的連接,,返回一個(gè)有效的句柄,如果連接失敗返回NULL。要檢索特定的錯(cuò)誤訊息,,使用GetLastError 函數(shù),。要確定為什么對(duì)服務(wù)器的訪問(wèn)被拒絕,請(qǐng)調(diào)用InternetGetLastResponseInfo函數(shù),。
備注 先調(diào)用InternetCanonicalizeUrl,,如果正在使用的網(wǎng)址包含一個(gè)相對(duì)URL和一個(gè)空格分隔的基礎(chǔ)URL。
這是一個(gè)通用的函數(shù),,可用于使用任何WinINet支持的協(xié)議檢索數(shù)據(jù),。這個(gè)函數(shù)在應(yīng)用程序并不需要指定特定的協(xié)議,只需要相應(yīng)的URL的數(shù)據(jù)時(shí),,特別有用,。InternetOpenUrl函數(shù)解析URL字符串,建立連接到服務(wù)器,,并準(zhǔn)備下載的指定URL的數(shù)據(jù),。該應(yīng)用程序可以用InternetReadFile (對(duì)文件)或InternetFindNextFile (對(duì)目錄)來(lái)檢索URL的數(shù)據(jù)。沒(méi)有必要在InternetOpenUrl 前調(diào)用InternetConnect,。
InternetOpenUrl在少于1024端口上禁用Gopher,,除了70——標(biāo)準(zhǔn)的Gopher端口和105——通常用于中央服務(wù)組織(民間組織)的名字搜索。
在使用完InternetOpenUrl返回的HINTERNET句柄后,,必須使用InternetCloseHandle函數(shù)關(guān)閉它,。
注意 :當(dāng)工作在異步模式(InternetOpen的dwFlags參數(shù)指定INTERNET_FLAG_ASYNC)和dwContext參數(shù)是零 (INTERNET_NO_CALLBACK),使用InternetSetStatusCallback函數(shù)設(shè)置的回調(diào),,將不被引用,,但是,將仍然在異步模式執(zhí)行回調(diào),。 要求 客戶端 需要 Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98, 或者 Windows 95,。
服務(wù)器- 需要 Windows Server 2008, Windows Server 2003, Windows 2000 Server, 或 Windows NT Server 4.0。
版本: 需要 Internet Explorer 3.0 或更高版本,。
頭 在 Wininet.h 中聲明,。
庫(kù) 使用 Wininet.lib 。
DLL 需要 Wininet.dll ,。
Unicode 執(zhí)行InternetOpenUrlW(Unicode)和InternetOpenUrlA (ANSI) 的
下載文件的例子:
DWORD dwTeread = 0; CHAR szbuffer[100]; HINTERNET internetopen; CString strUrl; const CWnd* pUrlEdit = GetDlgItem(IDC_EDITURL); assert(pUrlEdit); pUrlEdit->GetWindowText(strUrl); CString strFile; const CWnd* pFileEdit = GetDlgItem(IDC_EDITFILE); assert(pFileEdit); pFileEdit->GetWindowText(strFile); if(strUrl.IsEmpty() || strFile.IsEmpty()) { AfxMessageBox("Url Or SaveFile Is Null!"); return; } memset(szbuffer, 0, sizeof(szbuffer)); internetopen=InternetOpen("DownFile", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(NULL == internetopen) { AfxMessageBox("Internet open failed!"); return; } HINTERNET internetopenurl; internetopenurl = InternetOpenUrl(internetopen, strUrl, NULL, 0, INTERNET_FLAG_RELOAD, 0); if(NULL == internetopenurl) { AfxMessageBox("Internet open url failed!"); goto ERROR_URL; } BOOL bHwrite; DWORD dwWritten; HANDLE hCreatefile; hCreatefile = CreateFile(strFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(INVALID_HANDLE_VALUE == hCreatefile) { AfxMessageBox("Create File failed!"); goto ERROR_OPEN; } BOOL internetreadfile; while(true) { internetreadfile = InternetReadFile(internetopenurl, szbuffer, sizeof(szbuffer), &dwTeread); if(!dwTeread) break; bHwrite = WriteFile(hCreatefile, szbuffer, sizeof(szbuffer), &dwWritten, NULL); if(!bHwrite) { AfxMessageBox("Write to file failed!"); goto ERROR_FILE; } } AfxMessageBox("Finished Downloading!"); ERROR_FILE: CloseHandle(hCreatefile); ERROR_URL: InternetCloseHandle(internetopenurl); ERROR_OPEN: InternetCloseHandle(internetopen);
|