我正在尝试使用Indy组件从站点获取数据。 (这是在Delphi 7中,但很高兴使用任何有效的东西。)
如果您进入普通浏览器并放入路径: http://inventory.data.xyz.com/provide_data.aspx?ID=41100&Mixed=no?fc=true&lang=en 它会让您在重定向到实际站点之前勾选免责声明。这会创建一个cookie,如果我在Firefox中查看它就像这样: http://inventory.data.xyz.com 名称:ASP.NET_SessionId 内容:vm4l0w033cdng5mevz5bkzzq 路径:/ 发送:任何类型的连接 过期:会话结束时
我无法通过编程来完成免责声明部分,但我想如果我手动签署免责声明,我可以在我的代码中输入cookie的详细信息并直接连接到数据页面。我已尝试使用下面的代码执行此操作,但它只返回免责声明页面的html,这往往意味着它不使用我提供的cookie数据。我做错了什么?
procedure TfmMain.GetWebpageData;
var
http: TIdHTTP;
cookie: TIdCookieManager;
sResponse: String;
begin
try
http := TIdHTTP.Create(nil);
http.AllowCookies := True;
http.HandleRedirects := True;
cookie := TIdCookieManager.Create(nil);
cookie.AddCookie('ASP.NET_SessionId=vm4l0w033cdng5mevz5bkzzq', 'inventory.data.xyz.com');
http.CookieManager := cookie;
sResponse := http.Get('http://inventory.data.xyz.com/provide_data.aspx?ID=41100&Mixed=no?fc=true&lang=en');
ShowMessage(sResponse); // returns text of disclaimer
except
end;
end;
答案 0 :(得分:2)
由于您没有提供真实的网址,我只能进行推测,但是TIdCookieManager
尝试使用它时,您提供给TIdHTTP.Get()
的Cookie值可能是错误的或过时的,或者更有可能TIdCookieManager.AddCookie()
完全拒绝cookie(如果未触发TIdCookieManager.OnNewCookie
事件,则不接受cookie)。