Delphi 使用Indy httpserver在网页中查找关键字

Delphi 使用Indy httpserver在网页中查找关键字,delphi,pascal,indy,delphi-xe3,indy10,Delphi,Pascal,Indy,Delphi Xe3,Indy10,我正在尝试使用Indy http server在网页中查找代理筛选器的关键字。我已经设置了一个代理和http服务器,它可以与web浏览器一起工作,但在网页中查找关键字时,我遇到了困难 我一直在尝试将内存流转换为字符串,并在其中搜索关键字,但这可能是错误的做法。我在德尔福的经验有限,所以我有点被卡住了 如果有人能给我指点,那就太好了 谢谢 编辑:好的,我在这里添加了一个函数,其中“Stream”是来自http服务器的内存流,“what”是我正在搜索的关键字,但它似乎不起作用 function Fi

我正在尝试使用Indy http server在网页中查找代理筛选器的关键字。我已经设置了一个代理和http服务器,它可以与web浏览器一起工作,但在网页中查找关键字时,我遇到了困难

我一直在尝试将内存流转换为字符串,并在其中搜索关键字,但这可能是错误的做法。我在德尔福的经验有限,所以我有点被卡住了

如果有人能给我指点,那就太好了

谢谢

编辑:好的,我在这里添加了一个函数,其中“Stream”是来自http服务器的内存流,“what”是我正在搜索的关键字,但它似乎不起作用

function FindInMemStream(Stream: TMemoryStream; What: String):Integer;
var
  bufBuffer, bufBuffer2: array[0..254] of Char;
  i: Integer;
begin
filter.Form2.ListBox1.Items.Add('finding');
  What := 'train';
  Result := 0;
  i := 0;
  FillChar(bufBuffer, 255, #0);          
  FillChar(bufBuffer2, 255, #0);       
  StrPCopy(@bufBuffer2, What);           
  Stream.Position:=0;
  while Stream.Position <> Stream.Size do   
  begin
    Stream.Read(bufBuffer[0],Length(What));   
    if CompareMem(@bufBuffer,@bufBuffer2,Length(What)) then       
    begin
    filter.Form2.ListBox1.Items.Add(IntToStr(Stream.Position-Length(What)));
      Result := Stream.Position-Length(What);  // not 0 : it's found keyphrase
      Exit;
    end;
    i := i + 1;
  //  filter.Form2.ListBox1.Items.Add(IntToStr(i));
    Stream.Seek(i,0)     
  end;
end;
函数FindInMemStream(Stream:TMemoryStream;What:String):整数;
变量
bufBuffer,bufBuffer2:Char的数组[0..254];
i:整数;
开始
filter.Form2.ListBox1.Items.Add('finding');
什么:=‘火车’;
结果:=0;
i:=0;
FillChar(bufBuffer,255,#0);
FillChar(bufbuffer2255,#0);
strcopy(@bufBuffer2,What);
流位置:=0;
while Stream.Position Stream.Size do
开始
读取(bufBuffer[0],长度(What));
如果CompareMem(@bufBuffer,@bufBuffer2,Length(What))那么
开始
filter.Form2.ListBox1.Items.Add(IntToStr(Stream.positionlength,What));
结果:=流。位置长度(What);//不是0:已找到关键短语
出口
结束;
i:=i+1;
//filter.Form2.ListBox1.Items.Add(IntToStr(i));
Stream.Seek(i,0)
结束;
结束;

有一些库可用于HTML解析,例如(商业)

DIHTMLPasser从HTML、XHTML和XML中读取、提取信息,并编写这些信息

从其功能列表中:

  • 完全支持Unicode(UnicodeString或WideString,具体取决于Delphi版本)
  • 本机读取和写入70多个字符集(独立于操作系统)
  • 对TStream、内存缓冲区或字符串进行操作
  • 每次向应用程序返回一段HTML
有了这样一个库,可以很容易地从HTML响应中提取HTML内容(可见文本),剩下的查找搜索词的任务将变得很简单


我不会尝试编写自己的HTML解析器,而是使用现有的库。

您所说的关键字是什么?这是响应标题或内容的一部分吗?你能在你的问题中详细描述一下吗?只是html中的某个关键词;搜索词。”例如,银行业务。那么,您可以将该内容作为HTML文档处理,例如通过MSHTML对其进行解析,并检查该关键字是否是某个HTML标记的值(如果是)。这就是您可以对该内容所做的一切(但即使这样也比只检查该字符串是否是您收到的内容的一部分要安全得多)。好的,非常感谢。您知道从http服务器解析的任何教程/示例吗?感谢在比较文本时,您应该确保流和缓冲区都具有相同的文本编码(即相同的字节表示)。您假设您的流包含UTF16LE字节,但内容可能是UTF8、Windows-1251等格式。因此,即使“匹配”在视觉上存在,您也无法找到匹配。