WinInet,Internet傳輸協定,WinInet 概述,本文排版格式為,WinInet 層關係,Hinternet 句柄的層次關係,HTTP 函式層次關係,FTP 函式層次關係,典型的 HTTP 客戶端程式的處理流程,InetrnetOpen 初始化,Internet 的連線,HttpOpenRequest,向 HTTP 伺服器傳送指定的請求,
WinInet
Internet傳輸協定
WinInet API的檔案位於/Platform SDK/Internet, Intranet, Extranet Services/Internet Tools and Technologies/WinInet API。
請參見MSDN For VS 2005的詳細資訊:
Microsoft provides many APIs for programming both client and server applications. Many new applications are being written for the Internet, and as technologies, browser capabilities, and security options change, new types of applications will be written. Browsers run on client computers, providing access to the World Wide Web and displaying HTML pages that contain text, graphics, ActiveX controls, and documents. Servers provide FTP, HTTP, and gopher services, and run server extension applications using CGI and ISAPI. Your custom application can retrieve information and provide data on the Internet....
深入剖析 WinInet
1、Linux的Socket資料
2、EPOLL的資料
3、 HTTP SERVER 的資料
4、深入windows 原始碼
WinInet 概述
⊙ Hinternet 句柄的層次關係
⊙ HTTP 函式層次關係
⊙ 典型的 HTTP 客戶端程式的處理流程
1、普通 WinInet 處理函式
⊙ InternetAttemptConnect 嘗試建立到 Internet 的連線
⊙ InternetConnect 建立 Internet 的連線
⊙ InternetCheckConnection 檢查 Internet 的連線是否能夠建立
⊙ InternetSetOption 設定一個 Internet 選項
⊙ InternetSetStausCallback 安裝一個
回調函式,供 API
函式調用⊙ InternetQueryOption 查詢在一個指定句柄上的 Internet 選項
⊙ InternetQueryDataAvailable 查詢可用數據的數量
⊙ InternetReadFile(Ex) 從一個打開的句柄讀取數據
⊙ InternetFindNextFile 繼續檔案搜尋
⊙ InetrnetSetFilePointer 為 InternetReadFile 設定一個檔案位置
⊙ InternetWriteFile 將數據寫到一個打開的 Internet 檔案
⊙ InternetLockRequestFile 允許用戶為正在使用的檔案加鎖
⊙ InternetUnlockRequestFile 解鎖被鎖定的檔案
⊙ InternetTimeFromSystemTime 根據指定的 RFC 格式格式化日期和時間
⊙ InternetTimeToSystemTime 將一個 HTTP 時間/日期字串格式化為 SystemTime 結構對象
⊙ InternetConfirmZoneCrossing 檢查在安全 URL 和非安全 URL 間的變化
⊙ InternetCloseHandle 關閉一個單一的 Internet 句柄
⊙ InternetErrorDlg 顯示錯誤信息對話框
⊙ InternetGetLastResponesInfo 獲取最近傳送的 API函式的錯誤
2、HTTP 處理函式
⊙ HttpOpenRequest 打開一個 HTTP 請求的句柄
⊙ HttpSendRequert(Ex) 向 HTTP 伺服器傳送指定的請求
⊙ HttpQueryInfo 查詢有關一次 HTTP 請求的信息
⊙ HttpEndRequest 結束一個 HTTP 請求
⊙ HttpAddRequestHeaders 添加一個或多個 HTTP 請求報頭到 HTTP請求句柄
3、FTP 處理函式
⊙ FtpCreateDirectory 在 Ftp 伺服器新建一個目錄
⊙ FtpDelectFile 刪除存儲在 Ftp 伺服器上的檔案
⊙ FtpFindFirstFile 查找給定 Ftp 會話中的指定目錄
⊙ FtpGetCurrentDirectory 為指定 Ftp 會話獲取當前目錄
⊙ FtpGetFile 從 Ftp 伺服器下載檔案
⊙ FtpOpenFile 訪問一個遠程檔案以對其進行讀寫
⊙ FtpPutFile 向 Ftp 伺服器上傳檔案
⊙ FtpRemoveDirectory 在 Ftp 伺服器刪除指定的檔案
⊙ FtpRenameFile 為 Ftp 伺服器上的指定檔案改名
⊙ FtpSetCurrentDirectory 更改在 Ftp 伺服器上正在使用的目錄
本文排版格式為
正文由視窗自動換行;所有代碼以 80
字元為邊界;中英文字元以
空格符分隔。
正文
WinInet 層關係
1、WinInet 是一個
網路編程接口,包含了 Internet 底層協定 HTTP,FTP。
2、藉助 WinInet 接口,可不必去了解 Winsock、TCP/IP 和特定 Internet 協定
的細節就可以編寫出高水平的 Internet 客戶端程式。
3、WinInet 為 HTTP、FTP 提供了統一的函式集,也就是 Win32 API 接口。
4、WinInet 簡化了 HTTP、FTP 協定的編程,可輕鬆地將 Internet 集成到應用程式中。
Hinternet 句柄的層次關係
然後才能通過其進一步建立 HTTP、FTP 的連線。
2、使用 InternetConnect 函式創建一個指定的連線,它將通過傳遞給它的參數為指定的
站點初始化 HTTP、FTP 連線並創建一個從根句柄分支出去的 Hinernet 句柄。
所創建的句柄以建立到指定站點的連線。
HTTP 函式層次關係
的協定進行處理來訪問。
2、由於 HTTP 協定是在不斷發展的,當這些底層協定被更新後也將影響這些 HTTP 函式行為
HttpAddRequestHeaders、HttpQueryInfo、HttpSendRequest、HttpSendRequestEx、
InternetErrorDlg 將使用它們所依靠的這些函式創建的 Hinternet句柄。
FTP 函式層次關係
1、FTP 函式需要請求得到特定類型的 Hinternet句柄才能正常工作,這些句柄的創建
必須按一定次序來進行:
FTP連線句柄
2、該圖展示了依賴於 InternetConnect 所返回FTP 連線句柄的 FTP函式之間的層次關係。
典型的 HTTP 客戶端程式的處理流程
1、目的:開始 HTTP會話,建立 HTTP 連線
方法:InetrnetOpen、
InternetAttemptConnect
InternetConnect
結果:初始化 WinInet.dll 並聯接伺服器,返回相應的句柄
2、目的:創建一個 HTTP請求
結果:
3、目的:傳送一個 HTTP請示
方法:HttpAddRequestHeaders
HttpSendRequest(Ex)
結果:
4、目的:讀檔案
方法:InternetReadFile(Ex)
結果:使用你提供的緩衝讀指定的位元組
5、目的:獲取 HTTP請求信息
方法:HttpQueryInfo
結果:從伺服器獲取 HTTP 請求頭信息
方法:InternetGetLastResponesInfo
InternetErrorDlg
結果:處理所有普通的異常類型
7、目的:結束 HTTP 會話
方法:HttpEndRequest、
InternetCloseHandle
結果:自動清除打開的句柄的連線
InetrnetOpen 初始化
1、聲明:
dwAccessType: DWORD;
lpszProxy,
lpszProxyBypass:PChar;
dwFlags: DWORD): HINTERNET; stdcall;
2、參數:
1、lpszAgent 應用程式名,可以自定義
2、dwAccessType 存取類型,可以是:
①INTERNET_OPEN_TYPE_PRECONFIG =0 使用 IE 中的連線設定
②INTERNET_OPEN_TYPE_DIRECT =1 直接連線到伺服器
③INTERNET_OPEN_TYPE_PROXY =3 通過
代理伺服器進行連線
為 3 時需指定代理伺服器地址
3、lpszProxy CERN 代理伺服器地址,一般設定為 null;
4、lpszProxyBypass 代理伺服器地址;
5、dwFlags 標記,一般設定為 0,可以是:
①INTERNET_FLAG_DONT_CACHE 不在快取中保存取得的內容
②INTERNET_FLAG_OFFLINE
脫機方式InternetOpenUrl 打開 Url,讀取數據
1、聲明:
lpszUrl: PChar;
lpszHeaders: PChar;
dwHeadersLength: DWORD;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、參數:
2、lpszUrl 檔案 Url 地址,以 http:,ftp:打頭的 Url 地址;
3、lpszHeaders 傳送到伺服器的數據頭;
4、dwHeadersLength 傳送到伺服器的數據頭長度
5、dwFlags 標記,可以是:
①INTERNET_FLAG_RELOAD 強制重讀數據
②INTERNET_FLAG_DONT_CACHE 不保存到快取
③INTERNET_FLAG_TRANSFER_ASCII 使用文本數據
④INTERNET_FLAG_TRANSFER_BINARY 使用二進制數據
6、dwContext 上下文標記,如果使用回調功能時這個值將傳送給
回調函式Internet 的連線
1、聲明:
function InternetConnect(hInet: HINTERNET;
lpszServerName: PChar;
nServerPort: INTERNET_PORT;
lpszUsername: PChar;
lpszPassword: PChar;
dwService: DWORD;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、參數:
1、hInet 由 InternetOpen 返回的句柄
2、lpszServerName 伺服器的地址
3、nServerPort HTTP協定
連線埠號(預設80)
4、lpszUsername 用戶名
5、lpszPassword 用戶密碼
6、dwService 決定服務類型 HTTP,FTP,可以是:
①INTERNET_SERVICE_FTP = 1; 連線到一個 FTP 伺服器上
②INTERNET_SERVICE_HTTP = 3; 連線到一個 HTTP 伺服器上
7、dwFlags
8、dwContext
HttpOpenRequest
1、聲明:
lpszVerb: PChar;
lpszObjectName: PChar;
lpszVersion: PChar;
lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、參數:
1、hConnect InternetConnect句柄
2、lpszVerb 命令字,如果為 NULL,使用
預設值“GET”
3、lpszObjectName 命令對象,通常是一個檔案名稱、
執行檔或是一個搜尋列表
4、lpszVersion HTTP版本,如果為空,將使用“HTTP/1.0”
5、lpszReferrer 一個網址,可以為空
6、lplpszAcceptTypes中 程式接收的檔案類型列表。把
空值傳給該函式即通知了伺服器只有文本檔案可以被接收
'application/octet-stream'
7、dwFlags 標誌 使用 or 連線標誌
①INTERNET_FLAG_NO_CACHE_WRITE 標誌不緩衝寫
②INTERNET_FLAG_KEEP_CONNECTION 保持連線
③INTERNET_FLAG_SECURE { use PCT/SSL if applicable (HTTP) }
Secure Channel (SSL/PCT) failures of the following types. }
④INTERNET_FLAG_IGNORE_CERT_CN_INVALID { bad common name in X509 Cert. }
⑤INTERNET_FLAG_IGNORE_CERT_DATE_INVALID { expired X509 Cert. }
8、dwContext Integer(Self)?
向 HTTP 伺服器傳送指定的請求
1、聲明:
function HttpSendRequest(hRequest: HINTERNET;
lpszHeaders: PChar;
dwHeadersLength: DWORD;
lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
2、參數:
2、lpszHeaders 服務請求的數據頭
3、dwHeadersLength 服務請求的數據頭的長度
4、lpOptional 緊跟在標題後任意數據的地址,此參數一般用於 POST 和 PUT 操作
5、dwOptionalLength 數據的長度
InternetSetOption 設定一個 Internet 選項
1、聲明
function InternetSetOption(hInet: HINTERNET;
dwOption: DWORD;
lpBuffer: Pointer;
dwBufferLength: DWORD): BOOL; stdcall;
2、參數:
1、hInet 句柄
2、dwOption Internet 選項,可以是:
①INTERNET_OPTION_SEND_TIMEOUT 設定,傳送請求和連線時的逾時時間
②INTERNET_OPTION_RECEIVE_TIMEOUT 設定,接收請求和連線時的逾時間間
3、lpBuffer 值
4、dwBufferLength 值大小