InternetOpenUrl函數 的應用

來源:互聯網
上載者:User

 

通過一個完整的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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.