久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

深入剖析 WinInet (轉(zhuǎn))

 guitarhua 2011-08-18

深入剖析 WinInet (轉(zhuǎn))  

2008-07-14 16:44:27|  分類: 網(wǎng)絡(luò)編程 |  標(biāo)簽: |字號(hào) 訂閱

 
深入剖析 WinInet

 

深入剖析 WinInet 
1,、Linux的Socket資料
2,、EPOLL的資料
3、 HTTP SERVER 的資料
4,、深入windows 源代碼
目錄
===============================================================================
⊙ WinInet      概述
⊙ Hinternet    句柄的層次關(guān)系
⊙ HTTP         函數(shù)層次關(guān)系
⊙ 典型的 HTTP  客戶端程序的處理流程

1,、普通 WinInet 處理函數(shù)

⊙ InetrnetOpen                初始化 WinInet.dll
⊙ InternetOpenUrl             打開 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         查詢?cè)谝粋€(gè)指定句柄上的 Internet 選項(xiàng)
⊙ InternetQueryDataAvailable  查詢可用數(shù)據(jù)的數(shù)量
⊙ InternetReadFile(Ex)        從一個(gè)打開的句柄讀取數(shù)據(jù)
⊙ InternetFindNextFile        繼續(xù)文件搜尋
⊙ InetrnetSetFilePointer      為 InternetReadFile 設(shè)置一個(gè)文件位置
⊙ InternetWriteFile           將數(shù)據(jù)寫到一個(gè)打開的 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             打開一個(gè) HTTP 請(qǐng)求的句柄
⊙ HttpSendRequert(Ex)         向 HTTP 服務(wù)器發(fā)送指定的請(qǐng)求
⊙ HttpQueryInfo               查詢有關(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)行讀寫
⊙ FtpPutFile                  向 Ftp 服務(wù)器上傳文件
⊙ FtpRemoveDirectory          在 Ftp 服務(wù)器刪除指定的文件
⊙ FtpRenameFile               為 Ftp 服務(wù)器上的指定文件改名
⊙ FtpSetCurrentDirectory      更改在 Ftp 服務(wù)器上正在使用的目錄

===============================================================================

本文排版格式為:
    正文由窗口自動(dòng)換行,;所有代碼以 80 字符為邊界,;中英文字符以空格符分隔。

(作者保留對(duì)本文的所有權(quán)利,未經(jīng)作者同意請(qǐng)勿在在任何公共媒體轉(zhuǎn)載,。)

(作者:匯編 QQ 241897582,。)

正文
===============================================================================
⊙ WinInet  概述
===============================================================================
1、WinInet 是一個(gè)網(wǎng)絡(luò)編程接口,,包含了 Internet 底層協(xié)議 HTTP,,F(xiàn)TP,。
2,、借助 WinInet 接口,可不必去了解 Winsock,、TCP/IP 和特定 Internet 協(xié)議
   的細(xì)節(jié)就可以編寫出高水平的 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)求得到特定類型的 Hinternet句柄才能正常工作,,這些句柄的創(chuàng)建
   必須按一定次序來(lái)進(jìn)行:
   1、首先使用 InternetOpen 創(chuàng)建根句柄,,然后才能通過(guò) InternetConnect 創(chuàng)建一個(gè)
      FTP連接句柄
   2,、該圖展示了依賴于 InternetConnect 所返回FTP 連接句柄的 FTP函數(shù)之間的層次關(guān)系。

===============================================================================
⊙ 典型的 HTTP 客戶端程序的處理流程
===============================================================================
1,、目的:開始 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é)果:處理所有普通的異常類型

7,、目的:結(jié)束 HTTP 會(huì)話
   方法:HttpEndRequest,、
         InternetCloseHandle        
   結(jié)果:自動(dòng)清除打開的句柄的連接


===============================================================================
⊙ 典型的 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       存取類型,,可以是:
      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             打開 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ù)類型 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             打開一個(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中   程序接收的文件類型列表,。把空值傳給該函數(shù)即通知了服務(wù)器只有文本文件可以被接收
                            'application/octet-stream'
   7、dwFlags               標(biāo)志   使用 or 連接標(biāo)志
      1,、INTERNET_FLAG_NO_CACHE_WRITE   標(biāo)志不緩沖寫
      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)
===============================================================================

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多