【发布时间】:2016-10-06 12:51:02
【问题描述】:
我正在尝试检索此页面的 <table><tbody> 部分:
http://www.mfinante.ro/infocodfiscal.html?captcha=null&cod=18505138
我正在使用 Delphi XE7。
我尝试使用IXMLHttpRequest、WinInet(InternetOpenURL()、InternetReadFile())、TRestClient/TRestRequest/TRestResponse、TIdHTTP.Get(),但他们检索到的只是一些乱码,就像这样:
<html><head><meta http-equiv="Pragma" content="no-cache"/>'#$D#$A'<meta http-equiv="Expires" content="-1"/>'#$D#$A'<meta http-equiv="CacheControl" content="no-cache"/>'#$D#$A'<script>'#$D#$A'(function(){p={g:"0119a4477bb90c7a81666ed6496cf13b5aad18374e35ca73f205151217be1217a93610c5877ece5575231e088ff52583c46a8e8807483e7185307ed65e",v:"87696d3d40d846a7c63fa2d10957202e",u:"1",e:"1",d:"1",a:"challenge等
以这段代码为例:
program htttpget;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils, HTTPApp, IdHTTP, ActiveX;
var
CoResult: Integer;
HTTP: TIdHTTP;
Query: String;
Buffer: String;
begin
try
CoResult := CoInitializeEx(nil, COINIT_MULTITHREADED);
if not((CoResult = S_OK) or (CoResult = S_FALSE)) then
begin
Writeln('Failed to initialize COM library.');
Exit;
end;
HTTP := TIdHTTP.Create;
Query := 'http://www.mfinante.ro/infocodfiscal.html?captcha=null' +
'&cod=18505138';
Buffer := HTTP.Get(Query);
writeln(Buffer);
HTTP.Destroy;
except
end;
end.
这个页面有什么问题?我这辈子没有做过很多“get”功能,但其他网站返回正常响应。有人至少可以向我解释一下为什么这不起作用吗?
还有其他方法可以获取此网页的内容吗?是否有其他编程语言(Java、脚本等)可以在没有第三方软件的情况下执行此操作(例如使用 Firefox 源代码来模拟浏览器,获取页面,而不显示窗口,然后复制内容)。
【问题讨论】:
-
你所说的胡言乱语看起来像是具有有效 HTML 和 Javascript 的正常响应。是什么让你觉得它有问题?
-
是的,那里是java脚本,不是乱码,但是如果您使用链接的浏览器和ViewSource访问,则会出现完全不同的代码。
-
在浏览器中加载页面后看到的可能是运行初始脚本的结果,该脚本可以在加载后修改页面内容。
-
所以我检索到的是很多函数,代码如下:{var table = "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D888E 中没有表 tag 但存在。它是一个修改页面的脚本,实际上可能是这样,有没有办法获得在浏览器中看到的页面内容?
-
您可以使用例如查看相同的原始回复Firefox 或 Chrome 中的开发人员工具(网络)。浏览器运行脚本,然后修改浏览器显示的页面。要在您的程序中实现同样的效果,最简单的方法可能是嵌入(并自动化)浏览器。
标签: delphi http-post indy http-get