我想做一个Delphi的服务程序,它的功能是,读取一个特定的ip地址上的一个页面中的内容(如 http://192.168.0.3/ip/GetIp.aspx),然后返回这个页面的所有显示的字符串,如何操作?本人没有做过网络Delphi,希望能具体说一下要放入什么组件来实现这个功能.还有就是如何创建成一个服务程序而不是应用程序.多谢!!!最好给我贴个源代码!

解决方案 »

  1.   

    用Webbrowser
    uses MSHTML, ActiveX,comobj;function GetHtml(const WebBrowser:TWebBrowser): string;
    const
    BufSize = $10000;
    var
    Size: Int64;
    Stream: IStream;
    hHTMLText: HGLOBAL;
    psi: IPersistStreamInit;
    begin
    if not Assigned(WebBrowser.Document) then Exit;OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));
    try
        hHTMLText := GlobalAlloc(GPTR, BufSize);
        if 0 = hHTMLText then RaiseLastWin32Error;    OleCheck(CreateStreamOnHGlobal(hHTMLText, True, Stream));
        try
          OleCheck(psi.Save(Stream, False));      Size := StrLen(PChar(hHTMLText));
          SetLength(Result, Size);
          CopyMemory(PChar(Result), Pointer(hHTMLText), Size);
        finally
          Stream := nil;
        end;
    finally
        psi := nil;
    end;
    end;
      

  2.   

    如果只要html源码,下面这样就行
    procedure TForm1.Button1Click(Sender: TObject);
    var
      htmlStr: string;
    begin
      htmlStr := idhttp1.Get('http://192.168.0.3/ip/GetIp.aspx');
    end;
      

  3.   

    如果要得到显示在页面上的文本,用下面的方法
    uses
      MSHTML, ActiveX;procedure TForm1.Button1Click(Sender: TObject);
    var
      HtmlStr: string;
      doc2: IHTMLDocument2;
      V: OleVariant;
    begin
      try
        try
          HtmlStr := IdHTTP1.Get('http://192.168.0.3/ip/GetIp.aspx');
        except    end;    doc2 := CoHTMLDocument.Create as IHtmlDocument2;
        try
          V := VarArrayCreate([0, 0], varVariant);
          V[0] := HtmlStr;
          doc2.Write(PSafeArray(TVarData(v).VArray));
          doc2.Close;
          HtmlStr := Trim(doc2.body.innerText);
          Caption := HtmlStr;
        finally    end;    doc2 := nil;
      except  end;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      strm: TStringStream;
      doc2: IHTMLDocument2;
      V: OleVariant;
      HtmlStr: string;begin
      strm := TStringStream.Create('', 936);
      IdAntiFreeze1.OnlyWhenIdle := False; // 设置使程序有反应
      try    IdHTTP1.Get('http://hi.baidu.com/', strm);    doc2 := CoHTMLDocument.Create as IHTMLDocument2;
        try
          V := VarArrayCreate([0, 0], varVariant);
          V[0] := strm.DataString;
          doc2.Write(PSafeArray(TVarData(V).VArray));
          doc2.Close;
          HtmlStr := Trim(doc2.body.innerText);
          Memo1.Lines.Text := HtmlStr;
        finally    end;
      except
        ShowMessage('网络错误!');
        strm.Free;
        Exit;
      end;
    end;这个代码中文没有乱码了。
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      strm: TStringStream;
      doc2: IHTMLDocument2;
      V: OleVariant;
      HtmlStr: string;begin
      strm := TStringStream.Create('', 936);
      IdAntiFreeze1.OnlyWhenIdle := False; // 设置使程序有反应
      try    IdHTTP1.Get('http://hi.baidu.com/', strm);    doc2 := CoHTMLDocument.Create as IHTMLDocument2;
        try
          V := VarArrayCreate([0, 0], varVariant);
          V[0] := strm.DataString;
          doc2.Write(PSafeArray(TVarData(V).VArray));
          doc2.Close;
          HtmlStr := Trim(doc2.body.innerText);
          Memo1.Lines.Text := HtmlStr;
        finally    end;
      except
        ShowMessage('网络错误!');
        strm.Free;
        Exit;
      end;
    end;这个代码中文没有乱码了。