お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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