|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"URI を指定して、HTTPの応答テキストを得る"
はーい。 かとちんです。\(^0^)/
NMHTTPが非常〜に重くて仕方が無く、あちこち探して見つけたCソースを
Delphi にコンバートした関数です。めちゃくちゃ高速になって本当に感激。
助かりました。
出所は、http://coolweb00.cool.ne.jp/masapico/api_InternetOpen.html
感謝感謝。
そこにもあるので私も言いますが、本ドキュメントの結果は保障しません。
でもウチではうまくいってます。よかったー。
(*
* URI ... http://xxxxxx を指定 CGIもOK
* NMHTTPの Get(URL) と違って、記号や2バイトコードも自動的
* に変換した上で送信します。
* Proxy ... プロキシ経由でなければ空文字、プロキシの場合は、
* 123.234.56.1:8080 のように、IP:Portをセット
*)
function HttpGetString(URI: string; Proxy: string): string;
const
REQ_TIMEOUT = 20000; // 適当にタイムアウト値(ミリ秒)を決めて下さい
var
hInet: HINTERNET;
hFile: HINTERNET;
PProxy: PChar;
Flag: DWORD;
Buf: array [0..1000] of Char;
ReadSize: DWORD;
Res: LongBool;
Limit: TDateTime;
begin
Result := '';
{ WININET初期化 }
if Proxy <> '' then
begin
PProxy := PChar(Proxy);
Flag := INTERNET_OPEN_TYPE_PROXY;
end else begin
PProxy := nil;
Flag := INTERNET_OPEN_TYPE_PRECONFIG;
end;
Limit := Now + REQ_TIMEOUT/24/60/60/1000;
hInet := InternetOpen('MostPowerFast', Flag, PProxy, nil, 0);
try
{ URLのオープン }
hFile := InternetOpenUrl(hInet, PChar(URI), nil, 0,
INTERNET_FLAG_RELOAD, 0);
try
{ オープンしたURLからデータを(1000バイトずつ)読み込む }
if hFile <> nil then
repeat
ReadSize := 1000;
{ 全て読み込んだらループを抜ける }
Res := InternetReadFile(hFile, @Buf, 1000, ReadSize);
if Res then
begin
Buf[ReadSize] := #0;
Result := Result + StrPas(@Buf);
end;
if Limit < Now then
raise Exception.Create('HTTP 要求タイムアウト!');
until (ReadSize = 0) and Res;
finally
InternetCloseHandle(hFile);
end;
finally
InternetCloseHandle(hInet);
end;
end;
▲● 2000/12/21 23:13 JDX06162(とんちんかんちんかとちん)
■ Inprise Delphi ... The Great Development Kit
uses D2Desktop, D3CSS, D4CSS, D5ENT;
Original document by かとちん 氏 ID:(JDX06162)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|