У меня есть следующий код в моей программе. Когда я пытаюсь проверить, является ли прокси действительным прокси или нет, это приводит к сбою моей программы. Любые идеи, как это исправить? Я пользуюсь инди 10.
if checkproxy('http://www.google.com') label1.text:='Good' else label1.text:='bad';
Если я пытаюсь вызвать другое соединение idHTTP после запроса checkproxy, происходит сбой программы.
Это фактический код ...., который возвращает ошибку ...
function TregForm.webSession(sURL : ansistring) : ansistring;
var sstream : Tstringstream;
httpcon : TIdHTTP;
antifreeze : TIdAntiFreeze;
begin
result := '';
sstream := tstringstream.Create('');
try
if length(SettingsForm.edtProxyServer.text) >= 7 then // 0.0.0.0
if checkproxy('<a href="http://www.google.com" rel="nofollow noreferrer">http://www.google.com</a>') then
begin
antifreeze := TIdAntiFreeze.Create(nil);
httpcon := TIdHTTP.create;
httpcon.ProxyParams.BasicAuthentication:=true;
httpcon.ProxyParams.ProxyPassword:=SettingsForm.edtProxyPass.Text;
httpcon.ProxyParams.ProxyPort:=strtoint(SettingsForm.edtProxyPort.Text);
httpcon.ProxyParams.ProxyServer:=SettingsForm.edtProxyServer.Text;
httpcon.ProxyParams.ProxyUsername:=SettingsForm.edtProxyUserName.Text;
end
else
begin
showmessage('Proxy Server Not Working.. Attempting to bypass the Proxy');
antifreeze := TIdAntiFreeze.Create(nil);
httpcon := TIdHTTP.create;
//httpcon.Request.ProxyConnection:='';
//httpcon.ProxyParams.BasicAuthentication:=false;
//httpcon.ProxyParams.ProxyPassword:='';
//httpcon.ProxyParams.ProxyPort:=0;
//httpcon.ProxyParams.ProxyServer:='';
//httpcon.ProxyParams.ProxyUsername:='';
end;
httpcon.HandleRedirects := true;
antifreeze.Active := true;
HttpCon.Get(sURL,sstream);
result := utf8towidestring(sstream.DataString);
except
httpcon.Disconnect;
end;
antifreeze.Active := false;
freeandnil(httpcon);
freeandnil(antifreeze);
freeandnil(sstream);
end;</p>
<p>function TregForm.checkproxy(sURL : ansistring) : boolean;
var //sstream : Tstringstream;
httpcon : TIdHTTP;
antifreeze : TIdAntiFreeze;
begin
result := true;
try
antifreeze := TIdAntiFreeze.Create(nil);
httpcon := TIdHTTP.create;
//sstream := tstringstream.Create('');
httpcon.ProxyParams.BasicAuthentication:=true;
httpcon.ProxyParams.ProxyPassword:=SettingsForm.edtProxyPass.Text;
httpcon.ProxyParams.ProxyPort:=strtoint(SettingsForm.edtProxyPort.Text);
httpcon.ProxyParams.ProxyServer:=SettingsForm.edtProxyServer.Text;
httpcon.ProxyParams.ProxyUsername:=SettingsForm.edtProxyUserName.Text;</p>
<pre><code>httpcon.HandleRedirects := true;
antifreeze.Active := true;
HttpCon.Request.ProxyConnection:=SettingsForm.edtProxyServer.Text;
HttpCon.head(sURL);
httpCon.Disconnect;
за исключением
на E: EIdException действительно начинаются
Результат: = FALSE;
конец;
На E: исключение начинаются
// showmessage ('Внешняя ошибка:' + # 13 # 10 + E.Message);
showmessage («Ошибка настроек прокси»);
Результат: = FALSE;
конец;
конец;
антифриз. Актив: = ложь;
FreeAndNil (httpcon);
FreeAndNil (антифриз);
// FreeAndNil (sstream);
конец;
Сообщение об ошибке: исключение AccessViolation в модуле key.exe на E001B844A.
Нарушение прав доступа по адресу 005B844A в модуле «key.exe». Чтение адреса 00000000.