2012-06-28 46 views
1

我試圖從使用Indy組件的網站獲取數據。 (這是在Delphi 7,但樂於使用任何工作的。)與Indy一起使用Cookie

如果你進入一個正常的瀏覽器,並把路徑: 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; 

回答

2

因爲我們還沒有提供一個真正的URL,我只能猜測,但可能的情況是,你正在爲TIdCookieManager cookie值是錯誤的或時已經過時TIdHTTP.Get()嘗試使用它,或者更可能TIdCookieManager.AddCookie()直接拒絕cookie(如果TIdCookieManager.OnNewCookie事件沒有被觸發,那麼cookie不被接受)。

+1

好的,我找到了答案。我將該項目移至DelphiXE,並且一切正常。我使用的是Delphi 7,我讀過的第一個Indy 10中的一個基本上不支持cookie。這個最新版本就是在錫上說的。 – user1358639