2012-01-07 15 views
1

私はウェブサイトから単一の値を取得したいと考えています。問題のページは数字の入った拡張子のないファイルで、HTMLコードはありません。ウェブページから値を引き出す

私がしたいのは、私のプログラムがこの数字を引き上げて自分のバージョン番号と比較することです。これを取り出す最良の方法は何でしょうか?ファイルをダウンロードしてtempディレクトリに保存し、ダウンロードしたファイル内の図を処理する小さなスニペットを書きましたが、誤解されていない場合は、より良い方法が必要ですか?

私はSOAPリクエストを使用している人について読んだことがありますが、これが私の望むものかどうかはわかりません。

ご協力いただければ幸いです。

+0

私は質問を理解することに苦労しています。あなたの最初の行では、それはhtmlだとあなたは、それはhtmlコードが含まれていないと言う。 HTMLではない.htmlファイル拡張子を持つファイルがあることを意味しますか? –

+0

申し訳ありませんが、私は私の質問を修正し、また私のファイルを変更しました。 – MrDKOz

+0

Andreasコードと反射を組み合わせて、あなたは家にいる –

答えて

6

これは、HTTP GETリクエストから文字列を取得する方法である:

function WebGetData(const UserAgent: string; const Server: string; 
    const Resource: string): string; overload; 
var 
    hInet: HINTERNET; 
    hURL: HINTERNET; 
    Buffer: array[0..1023] of AnsiChar; 
    i, BufferLen: cardinal; 
begin 
    result := ''; 
    hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, 
    nil, nil, 0); 
    if hInet = nil then RaiseLastOSError; 
    try 
    hURL := InternetOpenUrl(hInet, PChar('http://' + Server + Resource), 
     nil, 0, 0, 0); 
    if hURL = nil then RaiseLastOSError; 
    try 
     repeat 
     InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); 
     if BufferLen = SizeOf(Buffer) then 
      result := result + AnsiString(Buffer) 
     else if BufferLen > 0 then 
      for i := 0 to BufferLen - 1 do 
      result := result + Buffer[i]; 
     until BufferLen = 0; 
    finally 
     InternetCloseHandle(hURL); 
    end; 
    finally 
    InternetCloseHandle(hInet); 
    end; 
end; 

これは、更新のためにどのように私自身のソフトウェアAlgoSimチェックです。たとえば、

ShowMessage(WebGetData('My User Agent', 'services.rejbrand.se', 
    '/algosim/update/ver.asp')); 
+0

OK、 'result:= result + sth'は本当に醜いです。私はいつかこのコードを磨く必要があります...しかし、この長さの文字列の場合、それは受け入れられると思います... –

+0

魅力のように働いて、ありがとう! – MrDKOz

5

インディーズコンポーネントが同梱されています。あなたは、例えば、Stringにファイルの内容をダウンロードするにはTIdHTTP部品のGet()方法を使用することができます。

var 
    Version: String; 
begin 
    Version := IdHTTP1.Get('http://url_here'); 
    ... 
end; 
+0

+1 WinAPIを直接使用する特別な理由がない場合、Indyクラスのような単純で簡潔なソリューションが優れています。 –

関連する問題