我一直試圖在過去的兩天內解決這個問題的底部,而且我確實被卡住了。希望有些聰明的人可以幫助我。Delphi 2010中HTTPSend的突觸和字符串問題
問題是我有一個函數,我在一個線程中調用了一個從傳遞給它的網站下載文件(使用Synapse庫)的文件。但是,我發現每隔一段時間就會有一些網站不會下拉文件,但wget或Firefox/IE會毫無問題地下載它。
挖掘它,我發現了一些好奇的事情。下面是相關代碼:
uses
//[..]
HTTPSend,
blcksock;
//[..]
type
TMyThread = class(TThread)
protected
procedure Execute; override;
private
{ Private declarations }
fTheUrl: string;
procedure GetFile(const TheUrl: string);
public
property thrd_TheUrl: string read fTheUrl write fTheUrl;
end;
implementation
[..]
procedure TMyThread.GetFile(const TheUrl: string);
var
HTTP: THTTPSend;
success: boolean;
sLocalUrl: string;
IsSame : boolean;
begin
HTTP := THTTPSend.Create;
try
HTTP.UserAgent :=
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)';
HTTP.ProxyHost := 'MYPROXY.COM';
HTTP.ProxyPort := '80';
sLocalUrl :=
'http://web.archive.org/web/20071212205017/energizer.com/usbcharger/download/UsbCharger_setup_V1_1_1.exe';
IsSame := SameText(sLocalUrl, sTheUrl); //this equals True when I debug
///
///
/// THIS IS WHERE THE ISSUE BEGINS
/// I will comment out 1 of the following when debugging
///
HTTP.HTTPMethod('GET', sLocalUrl); // ----this works and WILL download the file
HTTP.HTTPMethod('GET', sTheUrl); // --- this always fails, and HTTP.ResultString contains "Not Found"
success := SysUtils.UpperCase(HTTP.ResultString) = 'OK';
if HTTP.ResultCode > 0 then
success := True; //this is here just to keep the value around while debugging
finally
HTTP.Free;
end;
end;
procedure TMyThread.Execute
begin
//fTheURL contains this value: http://web.archive.org/web/20071212205017/energizer.com/usbcharger/download/UsbCharger_setup_V1_1_1.exe
GetFile(fTheUrl);
end;
的問題是,當我分配一個局部變量的函數,並直接給它的URL,一切正常。但是,當將該變量傳遞給函數時,它失敗。有人有主意嗎?
HTTP.HTTPMethod('GET', sLocalUrl); // ----this works and WILL download the file
HTTP.HTTPMethod('GET', sTheUrl); // --- this always fails, and HTTP.ResultString contains "Not Found"
我使用(從2天前的版本)的最新版本Synapse from their SVN repository。
注意:我正在嘗試下載的文件是known to have a virus,我正在編寫的程序旨在下載惡意文件進行分析。所以,一旦你下載它,不要執行該文件。
但是,我使用這個URL b/c這是我可以重現問題。
如果你從定義中刪除了「常量」發生什麼呢? – frogb 2010-03-11 22:33:48
什麼也沒有改變。 – Mick 2010-03-11 23:57:05
fTheUrl實際分配在哪裏?由於兩個字符串「邏輯上」具有相同的值,但其中一個有效,另一個沒有,那麼這讓我懷疑用於fTheUrl變量的內存。 – 2010-03-12 01:34:33