我知道有很多Indy線程,但是我找不到符合我的情況的線程。使用Indy在Delphi 5下載CSV
我收到了一個帶有用戶名和密碼錶單的URL。然後這個動作到一個URL/reports.php上有多個超鏈接。
這些鏈接中的每一個將直接指向包含URL變量的頁面,例如reports.php?report = variablename,其中下載將立即開始。
我至今想:
procedure TForm1.PostData(Sender: TObject);
var
paramList:TStringList;
url,text:string;
// IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket;
idLogFile1 : TidLogFile;
begin
idLogFile1 := TidLogFile.Create(nil);
with idLogFile1 do
begin
idLogFile1.Filename := 'C:\HTTPSlogfile.txt';
idLogFile1.active := True;
end;
IdHTTP1 := TIdHTTP.Create(nil);
IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocket.Create(nil);
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23;
IdHTTP1.IOHandler := IdSSLIOHandlerSocket1;
IdHTTP1.HandleRedirects := true;
IdHTTP1.ReadTimeout := 5000;
IdHTTP1.Intercept := idLogFile1;
paramList:=TStringList.create;
paramList.Clear;
paramList.Add('loguser=testuser');
paramList.Add('logpass=duke7aunt');
paramList.Add('logclub=8005');
url := 'https://www.dfcdata.co.uk/integration/reports.php?report=live';
try
IdHTTP1.Post(url,paramList);
except
on E:Exception do
begin
showMessage('failed to post to: '+url);
ShowMessage('Exception message = '+E.Message);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
reportType : String;
begin
PostData(Self);
reportType := 'live';
GetUrlToFile('',reportType+'.csv');
end;
procedure TForm1.GetUrlToFile(AURL, AFile : String);
var
Output : TMemoryStream;
success : Boolean;
begin
success := True;
Output := TMemoryStream.Create;
try
try
IdHTTP1.Get(AURL, Output);
IdHTTP1.Disconnect;
except
on E : Exception do
begin
ShowMessage('Get failed to GET from '+IdHTTP1.GetNamePath +'. Exception message = '+E.Message);
success := False;
end;
end;
if success = True then
begin
showMessage('Filed saved');
Output.SaveToFile(AFile);
end;
finally
Output.Free;
end;
end;
在每一個嘗試,我得到 「IOHandler無效」 的錯誤。顯然,我沒有正確發佈到最初的頁面,但任何人都可以告訴我我失蹤的是什麼?我也可以簡單地在登錄後點擊下載URL,否則我必須使用cookies?
感謝
謝謝雷米,對不起很多新問題。 1)我分配TIdHttp1.IOHandler:= IdSSLIOHandlerSocket1,但我然後收到錯誤「無法加載SSL庫」。我附加了一個TIdHttp1.Intercept:= IdLogFile,它只是讀取「Stat Disconnected」。 2)你是否建議我使用GetUrlToFile('/ reports.php?report = variable','test.csv'); ? 3)泄漏物體意味着什麼? @Remy Lebeau - TeamB – notidaho
看來我的錯誤可能是由於錯誤的SSL dll。我在D5中使用了最新的Indy9庫。我加載了dpk並刪除了所有組件,下載了最新的10並運行了Fulld5.bat。我不知道這是否是升級的正確方法,但我收到各種消息說IndyProtocols50不使用或支持IdSSLOpenSSLHeaders和IdSSLOpenSSL,IndyX509。 – notidaho
看起來這是D5的問題。我會重新發布,因爲它是一個不同的問題:http://stackoverflow.com/questions/7902152/delphi-5-indy-ics-ssl-workaround謝謝 – notidaho