?? wininet.txt
字號(hào):
⊙ WinInet 概述
⊙ Hinternet 句柄的層次關(guān)系
⊙ HTTP 函數(shù)層次關(guān)系
⊙ 典型的 HTTP 客戶端程序的處理流程
1、普通 WinInet 處理函數(shù)
⊙ InetrnetOpen 初始化 WinInet.dll
⊙ InternetOpenUrl 打開(kāi) Url,讀取數(shù)據(jù)
⊙ InternetAttemptConnect 嘗試建立到 Internet 的連接
⊙ InternetConnect 建立 Internet 的連接
⊙ InternetCheckConnection 檢查 Internet 的連接是否能夠建立
⊙ InternetSetOption 設(shè)置一個(gè) Internet 選項(xiàng)
⊙ InternetSetStausCallback 安裝一個(gè)回調(diào)函數(shù),供 API 函數(shù)調(diào)用
⊙ InternetQueryOption 查詢(xún)?cè)谝粋€(gè)指定句柄上的 Internet 選項(xiàng)
⊙ InternetQueryDataAvailable 查詢(xún)可用數(shù)據(jù)的數(shù)量
⊙ InternetReadFile(Ex) 從一個(gè)打開(kāi)的句柄讀取數(shù)據(jù)
⊙ InternetFindNextFile 繼續(xù)文件搜尋
⊙ InetrnetSetFilePointer 為 InternetReadFile 設(shè)置一個(gè)文件位置
⊙ InternetWriteFile 將數(shù)據(jù)寫(xiě)到一個(gè)打開(kāi)的 Internet 文件
⊙ InternetLockRequestFile 允許用戶為正在使用的文件加鎖
⊙ InternetUnlockRequestFile 解鎖被鎖定的文件
⊙ InternetTimeFromSystemTime 根據(jù)指定的 RFC 格式格式化日期和時(shí)間
⊙ InternetTimeToSystemTime 將一個(gè) HTTP 時(shí)間/日期字串格式化為 SystemTime 結(jié)構(gòu)對(duì)象
⊙ InternetConfirmZoneCrossing 檢查在安全 URL 和非安全 URL 間的變化
⊙ InternetCloseHandle 關(guān)閉一個(gè)單一的 Internet 句柄
⊙ InternetErrorDlg 顯示錯(cuò)誤信息對(duì)話框
⊙ InternetGetLastResponesInfo 獲取最近發(fā)送的 API函數(shù)的錯(cuò)誤
2、HTTP 處理函數(shù)
⊙ HttpOpenRequest 打開(kāi)一個(gè) HTTP 請(qǐng)求的句柄
⊙ HttpSendRequert(Ex) 向 HTTP 服務(wù)器發(fā)送指定的請(qǐng)求
⊙ HttpQueryInfo 查詢(xún)有關(guān)一次 HTTP 請(qǐng)求的信息
⊙ HttpEndRequest 結(jié)束一個(gè) HTTP 請(qǐng)求
⊙ HttpAddRequestHeaders 添加一個(gè)或多個(gè) HTTP 請(qǐng)求報(bào)頭到 HTTP請(qǐng)求句柄
3、FTP 處理函數(shù)
⊙ FtpCreateDirectory 在 Ftp 服務(wù)器新建一個(gè)目錄
⊙ FtpDelectFile 刪除存儲(chǔ)在 Ftp 服務(wù)器上的文件
⊙ FtpFindFirstFile 查找給定 Ftp 會(huì)話中的指定目錄
⊙ FtpGetCurrentDirectory 為指定 Ftp 會(huì)話獲取當(dāng)前目錄
⊙ FtpGetFile 從 Ftp 服務(wù)器下載文件
⊙ FtpOpenFile 訪問(wèn)一個(gè)遠(yuǎn)程文件以對(duì)其進(jìn)行讀寫(xiě)
⊙ FtpPutFile 向 Ftp 服務(wù)器上傳文件
⊙ FtpRemoveDirectory 在 Ftp 服務(wù)器刪除指定的文件
⊙ FtpRenameFile 為 Ftp 服務(wù)器上的指定文件改名
⊙ FtpSetCurrentDirectory 更改在 Ftp 服務(wù)器上正在使用的目錄
===============================================================================
本文排版格式為:
正文由窗口自動(dòng)換行;所有代碼以 80 字符為邊界;中英文字符以空格符分隔。
正文
===============================================================================
⊙ WinInet 概述
===============================================================================
1、WinInet 是一個(gè)網(wǎng)絡(luò)編程接口,包含了 Internet 底層協(xié)議 HTTP,F(xiàn)TP。
2、借助 WinInet 接口,可不必去了解 Winsock、TCP/IP 和特定 Internet 協(xié)議
的細(xì)節(jié)就可以編寫(xiě)出高水平的 Internet 客戶端程序。
3、WinInet 為 HTTP、FTP 提供了統(tǒng)一的函數(shù)集,也就是 Win32 API 接口。
4、WinInet 簡(jiǎn)化了 HTTP、FTP 協(xié)議的編程,可輕松地將 Internet 集成到應(yīng)用程序中。
===============================================================================
⊙ Hinternet 句柄的層次關(guān)系
===============================================================================
1、首先通過(guò) InternetOpen 函數(shù)創(chuàng)建位于根部的 Hinternet 句柄,
然后才能通過(guò)其進(jìn)一步建立 HTTP、FTP 的連接。
2、使用 InternetConnect 函數(shù)創(chuàng)建一個(gè)指定的連接,它將通過(guò)傳遞給它的參數(shù)為指定的
站點(diǎn)初始化 HTTP、FTP 連接并創(chuàng)建一個(gè)從根句柄分支出去的 Hinernet 句柄。
3、HttpOpenRequest 和 FtpOpenFile、FtpFindFirstFile等函數(shù)將使用 InternetConnect
所創(chuàng)建的句柄以建立到指定站點(diǎn)的連接。
===============================================================================
⊙ HTTP 函數(shù)層次關(guān)系
===============================================================================
1、對(duì)于 WWW 服務(wù)器提供的資源可以直接通過(guò) InternetOpenUrl 或是 HTTP 函數(shù)對(duì)潛在
的協(xié)議進(jìn)行處理來(lái)訪問(wèn)。
2、由于 HTTP 協(xié)議是在不斷發(fā)展的,當(dāng)這些底層協(xié)議被更新后也將影響這些 HTTP 函數(shù)行為
3、InternetOpen、InternetConnect、HttpOpenRequest 將返回 Hinternet 句柄,而
HttpAddRequestHeaders、HttpQueryInfo、HttpSendRequest、HttpSendRequestEx、
InternetErrorDlg 將使用它們所依靠的這些函數(shù)創(chuàng)建的 Hinternet句柄。
===============================================================================
⊙ FTP 函數(shù)層次關(guān)系
===============================================================================
1、FTP 函數(shù)需要請(qǐng)求得到特定類(lèi)型的 Hinternet句柄才能正常工作,這些句柄的創(chuàng)建
必須按一定次序來(lái)進(jìn)行:
1、首先使用 InternetOpen 創(chuàng)建根句柄,然后才能通過(guò) InternetConnect 創(chuàng)建一個(gè)
FTP連接句柄
2、該圖展示了依賴(lài)于 InternetConnect 所返回FTP 連接句柄的 FTP函數(shù)之間的層次關(guān)系。
===============================================================================
⊙ 典型的 HTTP 客戶端程序的處理流程
===============================================================================
1、目的:開(kāi)始 HTTP會(huì)話,建立 HTTP 連接
方法:InetrnetOpen、
InternetAttemptConnect
InternetConnect
結(jié)果:初始化 WinInet.dll 并聯(lián)接服務(wù)器,返回相應(yīng)的句柄
2、目的:創(chuàng)建一個(gè) HTTP請(qǐng)求
方法:HttpOpenRequest
結(jié)果:
3、目的:發(fā)送一個(gè) HTTP請(qǐng)示
方法:HttpAddRequestHeaders
HttpSendRequert(Ex)
結(jié)果:
4、目的:讀文件
方法:InternetReadFile(Ex)
結(jié)果:使用你提供的緩沖讀指定的字節(jié)
5、目的:獲取 HTTP請(qǐng)求信息
方法:HttpQueryInfo
結(jié)果:從服務(wù)器獲取 HTTP 請(qǐng)求頭信息
6、目的:異常處理
方法:InternetGetLastResponesInfo
InternetErrorDlg
結(jié)果:處理所有普通的異常類(lèi)型
7、目的:結(jié)束 HTTP 會(huì)話
方法:HttpEndRequest、
InternetCloseHandle
結(jié)果:自動(dòng)清除打開(kāi)的句柄的連接
===============================================================================
⊙ 典型的 HTTP 客戶端程序的處理流程
===============================================================================
===============================================================================
⊙ InetrnetOpen 初始化 WinInet.dll
===============================================================================
1、聲明:
function InternetOpen(lpszAgent: PChar;
dwAccessType: DWORD;
lpszProxy,
lpszProxyBypass:PChar;
dwFlags: DWORD): HINTERNET; stdcall;
2、參數(shù):
1、lpszAgent 應(yīng)用程序名,可以自定義
2、dwAccessType 存取類(lèi)型,可以是:
1、INTERNET_OPEN_TYPE_PRECONFIG =0 使用 IE 中的連接設(shè)置
2、INTERNET_OPEN_TYPE_DIRECT =1 直接連接到服務(wù)器
3、INTERNET_OPEN_TYPE_PROXY =3 通過(guò)代理服務(wù)器進(jìn)行連接
為 3 時(shí)需指定代理服務(wù)器地址
3、lpszProxy CERN 代理服務(wù)器地址,一般設(shè)置為 nill;
4、lpszProxyBypass 代理服務(wù)器地址;
5、dwFlags 標(biāo)記,一般設(shè)置為 0,可以是:
1、INTERNET_FLAG_DONT_CACHE 不在緩存中保存取得的內(nèi)容
2、INTERNET_FLAG_OFFLINE 脫機(jī)方式
===============================================================================
⊙ InternetOpenUrl 打開(kāi) Url,讀取數(shù)據(jù)
===============================================================================
1、聲明:
function InternetOpenUrl(hInet: HINTERNET;
lpszUrl: PChar;
lpszHeaders: PChar;
dwHeadersLength: DWORD;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、參數(shù):
1、hInet 由 InternetOpen 返回的句柄
2、lpszUrl 文件 Url 地址,以 http:,ftp:打頭的 Url 地址;
3、lpszHeaders 發(fā)送到服務(wù)器的數(shù)據(jù)頭;
4、dwHeadersLength 發(fā)送到服務(wù)器的數(shù)據(jù)頭長(zhǎng)度
5、dwFlags 標(biāo)記,可以是:
1、INTERNET_FLAG_RELOAD 強(qiáng)制重讀數(shù)據(jù)
2、INTERNET_FLAG_DONT_CACHE 不保存到緩存
3、INTERNET_FLAG_TRANSFER_ASCII 使用文本數(shù)據(jù)
4、INTERNET_FLAG_TRANSFER_BINARY 使用二進(jìn)制數(shù)據(jù)
6、dwContext 上下文標(biāo)記,如果使用回調(diào)功能時(shí)這個(gè)值將傳送給回調(diào)函數(shù)
===============================================================================
⊙ InternetConnect 建立 Internet 的連接
===============================================================================
1、聲明:
function InternetConnect(hInet: HINTERNET;
lpszServerName: PChar;
nServerPort: INTERNET_PORT;
lpszUsername: PChar;
lpszPassword: PChar;
dwService: DWORD;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、參數(shù):
1、hInet 由 InternetOpen 返回的句柄
2、lpszServerName 服務(wù)器的地址
HTTP 地址必須為服務(wù)器名作InternetOpenUrl 語(yǔ)法分析
3、nServerPort HTTP協(xié)議端口號(hào)(缺省80)
4、lpszUsername 用戶名
5、lpszPassword 用戶密碼
6、dwService 決定服務(wù)類(lèi)型 HTTP,F(xiàn)TP,可以是:
1、INTERNET_SERVICE_FTP = 1; 連接到一個(gè) FTP 服務(wù)器上
2、INTERNET_SERVICE_HTTP = 3; 連接到一個(gè) HTTP 服務(wù)器上
7、dwFlags
8、dwContext
===============================================================================
⊙ HttpOpenRequest 打開(kāi)一個(gè) HTTP 請(qǐng)求的句柄
===============================================================================
1、聲明:
function HttpOpenRequest(hConnect: HINTERNET;
lpszVerb: PChar;
lpszObjectName: PChar;
lpszVersion: PChar;
lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR;
dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
2、參數(shù):
1、hConnect InternetConnect句柄
2、lpszVerb 命令字,如果為 NULL,使用缺省值“GET”
3、lpszObjectName 命令對(duì)象,通常是一個(gè)文件名、可執(zhí)行文件或是一個(gè)搜索列表
4、lpszVersion HTTP版本,如果為空,將使用“HTTP/1.0”
5、lpszReferrer 一個(gè)網(wǎng)址,可以為空
6、lplpszAcceptTypes中 程序接收的文件類(lèi)型列表。把空值傳給該函數(shù)即通知了服務(wù)器只有文本文件可以被接收
'application/octet-stream'
7、dwFlags 標(biāo)志 使用 or 連接標(biāo)志
1、INTERNET_FLAG_NO_CACHE_WRITE 標(biāo)志不緩沖寫(xiě)
2、INTERNET_FLAG_KEEP_CONNECTION 保持連接
3、INTERNET_FLAG_SECURE { use PCT/SSL if applicable (HTTP) }
{ Security Ignore Flags, Allow HttpOpenRequest to overide
Secure Channel (SSL/PCT) failures of the following types. }
4、INTERNET_FLAG_IGNORE_CERT_CN_INVALID { bad common name in X509 Cert. }
5、INTERNET_FLAG_IGNORE_CERT_DATE_INVALID { expired X509 Cert. }
8、dwContext Integer(Self)?
===============================================================================
⊙ HttpSendRequert(Ex) 向 HTTP 服務(wù)器發(fā)送指定的請(qǐng)求
===============================================================================
1、聲明:
function HttpSendRequest(hRequest: HINTERNET;
lpszHeaders: PChar;
dwHeadersLength: DWORD;
lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
2、參數(shù):
1、hRequest HttpOpenRequest句柄
2、lpszHeaders 服務(wù)請(qǐng)求的數(shù)據(jù)頭
3、dwHeadersLength 服務(wù)請(qǐng)求的數(shù)據(jù)頭的長(zhǎng)度
4、lpOptional 緊路在標(biāo)題后任意數(shù)據(jù)的地址,此參數(shù)一般用于 POST 和 PUT 操作
5、dwOptionalLength 數(shù)據(jù)的長(zhǎng)度
===============================================================================
⊙ InternetSetOption 設(shè)置一個(gè) Internet 選項(xiàng)
===============================================================================
1、聲明
function InternetSetOption(hInet: HINTERNET;
dwOption: DWORD;
lpBuffer: Pointer;
dwBufferLength: DWORD): BOOL; stdcall;
2、參數(shù):
1、hInet 句柄
2、dwOption Internet 選項(xiàng),可以是:
INTERNET_OPTION_SEND_TIMEOUT 設(shè)置,發(fā)送請(qǐng)求和連接時(shí)的超時(shí)時(shí)間
INTERNET_OPTION_RECEIVE_TIMEOUT 設(shè)置,接收請(qǐng)求和連接時(shí)的超時(shí)間間
3、lpBuffer 值
4、dwBufferLength 值大小
===============================================================================
⊙ InternetSetOption 設(shè)置一個(gè) Internet 選項(xiàng)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -