Windowsインターネット-WinINet学習ノート(2)

7635 ワード


6.HTTPセッション
WinINet関数を使ってWWWリソース(1)にアクセスし、WWW接続を初期化し、サービスタイプをINTERNET(u)に設定する。SERVICE_HTTP呼び出し Internet Connect HTTPセッションを作成します。
HINTERNET Internet Connect 
インターネット
、//InternetOpenが返したハンドル__in LPCTSTR 
lpszServer Name
を選択して、//対象サーバの文字列__in INTERNET_PORTを記述することができます。 
nServerPort
ターゲットサーバのポート__in LPCTSTR 
lpszUsername
を選択します。 
lpszPassword
パスワード 
dwService
,//使用するサービスの種類 
dwFlags
、__in DWORDUPTR 
dwContext
)0
nServerPort
Value
Meaning
INTERNETDEFAULT_FTP_PORT
Uses the default port for FTP servers(port 21)
INTERNETDEFAULT_GOPHER_PORT
Uses the default port for Gopher servers(port 70)
INTERNETDEFAULT_HTTP_PORT
Uses the default port for HTTP servers(port 80)
INTERNETDEFAULT_HTTPS_PORT
Uses the default port for Secure Hypertext Transfer Protocol(HTTPS)servers(port 443)
INTERNETDEFAULT_SOCKS_PORT
Uses the default port for SOCKS firewall servers(port 1080)
INTERNETINVALLIDPORT_NUMBER
Uses the default port for the service specified by dwService.
ldwService
Value
Meaning
INTERNETSERVICE_FTP
FTP service.
INTERNETSERVICE_GOPHER
Gopher service.
INTERNETSERVICE_HTTP
HTTP service.
(2)確立要求呼び出し HttpOpenRequest HTTP要求を作成しますが、この関数は自動的に要求を送信しません。要求を送信するには呼び出しが必要です。 HttpSendRequest HttpOpenRequest 原型
HINTERNET HttpOpenRequest 
hConnect
を選択します。 
//Internet Connect関数が返すハンドル
___in LPCTSTR 
lpspz Ver b
を選択します。 
//動作は、GET、PUT、POSTがあります。NULLに設定することもできます。デフォルトのGETとして使用されます。
___in LPCTSTR 
lpszObject Name
を選択します。 
//リソースを要求する文字列を説明します。標準ページの季節を要求するとき、このパラメータは空の列を指します。
___in LPCTSTR 
lpsz Version
を選択します。 
//HTTPバージョンでは、このパラメータがNULLの場合、デフォルトでは「HTTP/1.1」を使います。
___in LPCTSTR 
lpszReferer
を選択します。 
//lpszObjectNameはどのファイルから取ったのか説明しました。NULLに設定できます。
___in LPCTSTR*
lplpszAccept Types
を選択します。 
//
 
は一つの方向です
LPCTSTR
配列のポインタ!配列はNULLポインタで終了します。
プログラムが受け付けている内容を指定したタイプで、空にするとどんな種類の内容も受け付けません。空列にすると「」text/*「」に相当します。つまりテキストファイル以外の画像などのファイルは受け付けません。ある特定のファイルだけを受け取ると「イメージ/gif,image/jpeg」のような形になります。他の内容の種類についてはこちらをご覧ください。
_ジンD WORD 
dwFlags
を選択します。 
//普通は0に設定できます。
_ガイDWORDUPTR 
dwContext//普通はすべて0に設定することができます。
)0
(3)追加要求HttpAddrequest Headers 原型
BOOL HttpAdd Request Headers(
   __in HINTERNET 
hConnect
を選択します。
   __in LPCTSTR 
lpszHeaders
要求に追加するヘッダの文字列を含むポインタは、各ヘッダを一つのCR/LF(
 /r/n/r/n 
)ペアの終了
   __in DWORD 
dwHeaders Length
このパラメータを-1に設定すると、文字列は0で終わる文字列として扱われ、自動的に文字列の長さを計算します。
   __in DWORD 
dwModifiers
)0
dwModifiers
これらの値の組み合わせが可能です。
Value
Meaning
HTTP_ADDREQ_FLAG_ADD
Adds the header if it does not exist.Used with HTTP_ADDREQ_FLAG_REPLACE.
HTTP_ADDREQ_FLAG_ADD_IF_NEW
Adds the header only if it does not already exist;otherwise,an error is returned.
HTTP_ADDREQ_FLAG_COALESCE
Coalesces headers of the same name.
HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
Coalesces headers of the same name.For example,adding「Accent/text/*」followed by「Accept:audio/*」with this flags the formation of the single header「Accept/text/audio/*」This causes the first header found to be coalesced.It is up to the caling aplication to ensure a cohesive scheme with respect to coalesced/separate headers.
HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON
Coalesces headers of the same name using a semicolon.
HTTP_ADDREQ_FLAG_REPLACE
Replacces or removes a header.If the header value is empty and the header is found,it is removed.If not empty,the header value is replacced.
(4)要求HttpSendRequestを送信する
BOOL HttpSendRequest 
hrequest
を選択します。 
lpszHeaders
要求に添付されたヘッダはNULL uin DWORDとすることができます。 
dwHeaders Length
は、//lpszHeadersが指す文字列の長さ(TCHARRタイプで)を-1に設定します。HttpSendRequestAを呼び出した場合、文字列は0で終わる文字列として処理され、文字列の長さは自動的に計算されます。HttpSendRequestWを呼び出したときにエラーが発生します。 
lpOptional
このパラメータが指すデータは、POSTやPUT方法を使用すると、すぐに要求されて送信されます。送信するデータがない場合はNULLuguin DWORDに設定できます。 
dwOptional Length/lpOptionalデータのバイト長は、データがない場合は0に設定されます。
)0
(5)サーバにデータを送信する方法1:上記HttpSentRequestのlpOptionalパラメータの説明方法2を参照してください。 インターネットWriteFile 一つのハンドルにデータを送信して使用します。 HttpSendRequest Ex 一つの要求を問い合わせる情報を送る(6)。
BOOL HttpQuery Info     HINTERNET 
hrequest
を選択します。/*はHttpOpenRequestまたはInternetOpenUrlによって返されたハンドルです。     DWORD 
dwInfo Level
を選択します
 
Query Info Flags
..。
*/
   __inout LPVOID 
lpvBuffer
クエリー結果を格納するためのバッファエリアは、NULL*/u_inout LPDWORDではありません。 
lpdwBufferLength
、****lpvBufferが指すバッファのバイト長         関数が成功すると、この変数はバッファに書き込まれたデータの長さを格納します。データが文字列である場合は、文字列の終了文字は含まれません。         この変数に保存されているのはデータの実際のバイト長プログラムです。この長さに基づいてメモリを再割り当てし、もう一度この関数を実行します。 
lpdwIndex/*は見ていませんが、NULLに設定できます。
        
Pointer to a zro-based header index used to enumerate multiple headers with the same name.
        
When caling the function、this parameter is the specified header to return.
        
When the function returns,this parameter is the index of the next header.
        
If the next index cannot be found,ERRORHuHTTP__HEADERUNOT FOUND is returned.*/
)0
(7)から WW アップロードリソースは呼び出し中です。 HttpOpenRequest 和 Http SendRequest その後、プログラムが使えます。 Internet ReadFile InternetQuery Data Available,Internet Set FilePointer HTTPサーバ上のリソースをダウンロードしに来ました。
BOOL InternetQueryDataAvailable(//       
__in HINTERNET
hFile, // InternetOpenUrl, FtpOpenFile, GopherOpenFile, HttpOpenRequest

__out LPDWORD
lpdwNumberOfBytesAvailable, //
__in DWORD
dwFlags, // , 0
__in DWORD_PTR
dwContext // , 0
);
BOOL InternetReadFile(/ハンドルのデータを読み出す
同前   HINTERNET h File//Internet OpenUrl,FtpOpenFile,GopherOpenFile,HttpOpenRequestが作成したハンドル
_002639;out LPVOID lpBuffer、/データを格納するバッファエリア
同前   DWORD dwNumber OfBytes ToRead、/読出し予定バイト数
_002639;out LPDWORD lpdwNumber OfBytes Read/読み取ったバイト数
)0DWORD Internet SetFilePointer(/InternetReadFileのファイル位置を設定します。マルチスレッドダウンロードはこれで実現しますか?)サーバがランダムアクセスをサポートしていないと関数呼び出しが失敗します。InternetReadFileがファイルの最後まで読み取ったら、この函数の呼び出しも失敗します。作成します。またはHttpOpenRequestによって作成されました。 このハンドルはINTERNET___________________________________________________________________________________________________________________________________________________________________________________(このフラグを使うと、移動バイト数は符号なし処理として扱われます。)、FILECURRENT、FILE END(コンテンツの長さが取れないと、このフラグを使うと失敗します。)_ku in DWORDuPTR dwContext/予約パラメータはNULLです。PS:Evernoteで編集したフォーマットはここに問題があるようです。