|
Тема
|
Indy, IdHTTP & HTTPS
|
|
Автор | chovek (Нерегистриран) |
Публикувано | 16.10.06 12:24 |
|
Ползвам IdHTTP1.Get() за получаване на данни през http, но в един
случай ми се налага да ползвам HTTPS(secure)
https://site.com и тогава започва да иска
Intercept. IdConnectionInterceptOpenSSL изисква .dll , което е голям проблем в моя случай. Но дори когато го добавя дава грешка при отварянето:
Socket Error # 11004
Get при нормалните сайтове си работи.
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: chovek]
|
|
Автор | chovek (Нерегистриран) |
Публикувано | 23.10.06 08:34 |
|
за сега нещата не тръгват. Никой ли няма опит с този проблем?
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: chovek]
|
|
Автор | mole. (Нерегистриран) |
Публикувано | 23.10.06 17:36 |
|
Това е Get който аз ползвам, нямам претенции да е написано оптимално и т.н :-)
Дано ти свърши работа. При мен работи.
=================================
function GetURL(url:string; myIdHTTP:TIdHTTP = nil):string;
var haveToClose : boolean;
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocket;
oldHandler : TIdIOHandler;
crypted : boolean;
begin
haveToClose := not Assigned(myIdHTTP);
IdSSLIOHandlerSocket := nil;
crypted := false;
result := 'error';
if (haveToClose) then myIdHTTP:=TIdHTTP.Create(MainForm);
try
//setupIdHTTP(myIdHTTP); //Dopalnitelni nastroiki Proxy etc.
try
if pos('https:',url)>0 then
begin
crypted := true;
IdSSLIOHandlerSocket:=TIdSSLIOHandlerSocket.Create(MainForm);
IdSSLIOHandlerSocket.Name := 'IdSSLIOHandlerSocket';
IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv2;
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmUnassigned;
IdSSLIOHandlerSocket.SSLOptions.VerifyMode := [];
IdSSLIOHandlerSocket.SSLOptions.VerifyDepth := 0;
oldHandler:=myIdHTTP.IOHandler;
myIdHTTP.IOHandler := IdSSLIOHandlerSocket;
myIdHTTP.Port := 443;
myIdHTTP.HTTPOptions:=[hoForceEncodeParams];
end;
result:=myIdHTTP.Get(url);
except
end;
finally
if (crypted) then
begin
myIdHTTP.IOHandler:=oldHandler;
IdSSLIOHandlerSocket.free;
end;
if (haveToClose) then myIdHTTP.Free;
end;
end;
=====================
PPS: dir-а е малко странен днес, май изисква logout за да пуснеш съобщение...
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: mole.]
|
|
Автор | chovek (Нерегистриран) |
Публикувано | 24.10.06 13:43 |
|
Мерси много. Изглежда работещо, но не успявам да го подкарам.
С коя версия на Indy / Delphi работи тази процедура?
Ползва ли някакви dll или сертификационни файлове?
Аз опитах да го подкарам на Delphi 6 и Indy 8. Но нямаше съвместимост с компонентите. При опит да мигрирам към Indy10 вече не мога да компилирам
със събщение: [Fatal Error] Main.pas(9): Unit IdBaseComponent was compiled with a different version of System.RTLVersion
Същото го дава и за IdComponent, IdTCPConnection, IdTCPClient, IdHTTP т.н.
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: chovek]
|
|
Автор | mole. (Нерегистриран) |
Публикувано | 24.10.06 14:38 |
|
Извинявай, трябваше да посоча още в първия постинг:
gsIdVersion = '9.0.18';
Delphi 7
Изисква DLL мисля че няма как да не изисква... ssleay32.dll и libeay32.dll
С Indy10 мои спомени спомени имах проблеми, ама питай ме сега какви... не се сещтам...
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: mole.]
|
|
Автор | chovek (Нерегистриран) |
Публикувано | 25.10.06 13:53 |
|
мерси моле, нещата имат напредък. всичко както ми го даде работи. но при get заявка с предаване на параметър https://site.com?param=1234
не се кънектва и дава:"Socket Error # 11004
може би предаването на параметър прави невалиден адреса. Имаш ли идея?
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: chovek]
|
|
Автор | mole. (Нерегистриран) |
Публикувано | 25.10.06 16:43 |
|
Пробва ли вместо https://site.com?param=1234
URL да бъде https://site.com/?param=1234
| |
Тема
|
10x
[re: mole.]
|
|
Автор | chovek (Нерегистриран) |
Публикувано | 25.10.06 17:39 |
|
човек, обичам те!
не можеш да си представиш колко ми помогна.
3 дена го боря, а то било една чертичка.
10x отново
| |
Тема
|
Re: Indy, IdHTTP & HTTPS
[re: mole.]
|
|
Автор | indy1O (Нерегистриран) |
Публикувано | 16.03.08 13:05 |
|
Здравейте,
попаднах на тази готина функцийка, даже при мен съм я кръстил GetURLMole.
function GetURL(url:string; myIdHTTP:TIdHTTP = nil):string;
var haveToClose : boolean;
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocket;
oldHandler : TIdIOHandler;
crypted : boolean;
begin
haveToClose := not Assigned(myIdHTTP);
IdSSLIOHandlerSocket := nil;
crypted := false;
result := 'error';
if (haveToClose) then myIdHTTP:=TIdHTTP.Create(MainForm);
try
//setupIdHTTP(myIdHTTP); //Dopalnitelni nastroiki Proxy etc.
try
if pos('https:',url)>0 then
begin
crypted := true;
IdSSLIOHandlerSocket:=TIdSSLIOHandlerSocket.Create(MainForm);
IdSSLIOHandlerSocket.Name := 'IdSSLIOHandlerSocket';
IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv2;
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmUnassigned;
IdSSLIOHandlerSocket.SSLOptions.VerifyMode := [];
IdSSLIOHandlerSocket.SSLOptions.VerifyDepth := 0;
oldHandler:=myIdHTTP.IOHandler;
myIdHTTP.IOHandler := IdSSLIOHandlerSocket;
myIdHTTP.Port := 443;
myIdHTTP.HTTPOptions:=[hoForceEncodeParams];
end;
result:=myIdHTTP.Get(url);
except
end;
finally
if (crypted) then
begin
myIdHTTP.IOHandler:=oldHandler;
IdSSLIOHandlerSocket.free;
end;
if (haveToClose) then myIdHTTP.Free;
end;
end;
Проблема е следния: използвам indy10 и ми дава грешка: Read timeout
Целта ми е да направя заявка със SSL.
Ако не използвам SSL компонент, всичко си е наред.
В indy10 няма такова нещо: myIdHTTP.Port - незнам дали проблема е от това или от нещо друго, но ще съм ви много благодарен да помогнете.
| |
|
|
|
|