使用Indy的cookie

时间:2012-06-28 09:12:56

标签: delphi delphi-7 session-cookies indy

我正在尝试使用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;

1 个答案:

答案 0 :(得分:2)

由于您没有提供真实的网址,我只能进行推测,但是TIdCookieManager尝试使用它时,您提供给TIdHTTP.Get()的Cookie值可能是错误的或过时的,或者更有可能TIdCookieManager.AddCookie()完全拒绝cookie(如果未触发TIdCookieManager.OnNewCookie事件,则不接受cookie)。