通過一個完整的FTP,Gopher或HTTP網址開啟一個資源。
HINTERNET InternetOpenUrl (__in HINTERNET hInternet ,__in LPCTSTR lpszUrl ,__in LPCTSTR lpszHeaders ,__in DWORD值dwHeadersLength ,__in的DWORD dwFlags ,__in DWORD_PTR dwContext);
參數
hInternet
當前的 Internet 交談控制代碼。控制代碼必須由前期的 InternetOpen 調用返回。
lpszUrl
一個Null 字元結束的字串變數的指標,指定讀取的網址。只有以ftp:, gopher:, http:, 或者 https: 開頭的網址被支援。
lpszHeaders
一個Null 字元結束的字串變數的指標,指定發送到HTTP伺服器的頭資訊。欲瞭解更多資訊,請參閱HttpSendRequest函數裡lpszHeaders參數的說明。
dwHeadersLength
額外的頭的大小,以TCHAR為單位。如果這個參數是-1L並且lpszHeaders不是NULL,lpszHeaders被假設為零終止( ASCIIZ ),而長度被自動計算。
dwFlags
此參數可為下列值之一。
數值 說明
INTERNET_FLAG_EXISTING_CONNECT
如果使用相同的必須屬性建立會話,會嘗試利用現有的InternetConnect對象。這隻對FTP操作非常有用,因為FTP是唯一在同一會話中執行多種操作的協議。WinINet API 為每個由InternetOpen產生的HINTERNET控制代碼緩衝一個單獨連結控制代碼。InternetOpenUrl使用此標誌的HTTP和FTP串連。
INTERNET_FLAG_HYPERLINK
當決定何時從網路重載時,如果伺服器沒有返回 Expires time 和 LastModified,那麼強制重載。
INTERNET_FLAG_IGNORE_CERT_CN_INVALID
停用檢查從伺服器對必須的主機名稱返回的SSL/PCT-based認證。 WinINet函數使用簡單的比較匹配主機名稱和萬用字元的規則檢查認證。
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
停用檢查的SSL/PCT-based的認證的適當的有效日期。
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
禁用檢測這中特殊的重新導向。當使用此標誌, WinINet 透明允許從HTTPS到HTTP URL的重新導向。
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
禁用檢測這中特殊的重新導向。當使用此標誌, WinINet 透明的允許的HTTP到HTTPS URL的重新導向。
INTERNET_FLAG_KEEP_CONNECTION
如果可能的話,為串連使用保活語義。這個標誌要求微軟網路( MSN ),NTLM和其他類型的身分識別驗證。
INTERNET_FLAG_NEED_FILE
如果要建立的檔案不能被緩衝,建立臨時檔案。
INTERNET_FLAG_NO_AUTH
不試圖自動驗證。
INTERNET_FLAG_NO_AUTO_REDIRECT
不自動處理HttpSendRequest中的重新導向。
INTERNET_FLAG_NO_CACHE_WRITE
不添加返回實體到緩衝。
INTERNET_FLAG_NO_COOKIES
不會自動添加的Cookie頭到請求,並且不自動添加返回的cookie到cookie資料庫。
INTERNET_FLAG_NO_UI
禁用Cookie的對話方塊。
INTERNET_FLAG_PASSIVE
使用被動FTP語義。InternetOpenUrl為FTP的檔案和目錄使用此標誌。
INTERNET_FLAG_PRAGMA_NOCACHE
即使代理中存在快取複本,也強制要求由原始伺服器返回。
INTERNET_FLAG_RAW_DATA
檢索的Gopher目錄資訊時,傳回的資料作為GOPHER_FIND_DATA結構,如果檢索的FTP目錄資訊時,作為一個WIN32_FIND_DATA結構。如果此標誌沒有指定,或者請求通過CERN代理建立, InternetOpenUrl返回的HTML版本的目錄。
INTERNET_FLAG_RELOAD
從原伺服器強制下載所要求的檔案,對象,或目錄列表,而不是從緩衝下載。
INTERNET_FLAG_RESYNCHRONIZE
重新載入的HTTP資源,如果資源在最後一次下載後已被修改。所有FTP和Gopher資源將被重載。
INTERNET_FLAG_SECURE
使用安全傳輸語義。這次傳輸使用安全套位元組層/專用通訊技術(的SSL / PCT ),這隻有在HTTP請求時有意義。
dwContext
一個指向一個應用程式定義的值,將隨著返回的控制代碼,一起傳遞給回呼函數。
傳回值
如果已成功建立到FTP,Gopher,或HTTP URL的串連,返回一個有效控制代碼,如果串連失敗返回NULL。要檢索特定的錯誤訊息,使用GetLastError 函數。要確定為什麼對伺服器的訪問被拒絕,請調用InternetGetLastResponseInfo函數。
備忘
先調用InternetCanonicalizeUrl,如果正在使用的網址包含一個相對URL和一個空格分隔的基礎URL。
這是一個通用的函數,可用於使用任何WinINet支援的協議檢索資料。這個函數在應用程式並不需要指定特定的協議,只需要相應的URL的資料時,特別有用。InternetOpenUrl函數解析URL字串,建立串連到伺服器,並準備下載的指定URL的資料。該應用程式可以用InternetReadFile (對檔案)或InternetFindNextFile (對目錄)來檢索URL的資料。沒有必要在InternetOpenUrl 前調用InternetConnect。
InternetOpenUrl在少於1024連接埠上禁用Gopher,除了70——標準的Gopher連接埠和105——通常用於中央服務組織(民間組織)的名字搜尋。
在使用完InternetOpenUrl返回的HINTERNET控制代碼後,必須使用InternetCloseHandle函數關閉它。
注意 :當工作在非同步模式(InternetOpen的dwFlags參數指定INTERNET_FLAG_ASYNC)和dwContext參數是零 (INTERNET_NO_CALLBACK),使用InternetSetStatusCallback函數設定的回調,將不被引用,但是,將仍然在非同步模式執行回調。
要求
用戶端
需要 Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98, 或者 Windows 95。
伺服器-
需要 Windows Server 2008, Windows Server 2003, Windows 2000 Server, 或 Windows NT Server 4.0。
版本:
需要 Internet Explorer 3.0 或更高版本。
頭
在 Wininet.h 中聲明。
庫
使用 Wininet.lib 。
DLL
需要 Wininet.dll 。
Unicode
執行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);