Merhaba,
Düne kadar neredeyse sorunsuz çalışan TEmbeddedWB proxy fonksiyonları dünden beri çalışmaz oldu. Daha doğrusu bütün proxy sunucuları saydam gibi davranmaya başladı. Bİr programlama hatası sözkonusu değil, çünkü aynı programın çalışan eski sürümleri de aynı şekilde çalışıyor.
Bu davranış, farklı internet sağlayıcıları üzerinde de aynı tepkiyi veriyor.
Böyle bir durumla karşılaşan var mı?
Bu son iki günde TEmbeddedWB kullanan ve proxy fonksiyonlarını başarıyla çalıştıran var mı?
Teşekkürler.
TEmbeddedWB proxy birdenbire çalışmaz oldu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: TEmbeddedWB proxy birdenbire çalışmaz oldu
Hocam TEmbeddedWB üzerinde browsera ona özel bir proxy ayarı yok. Sen oradaki ayarları değiştirince direkt senin windows'un internet ayarlarındaki bağlantı kısmındaki proxy değişikliğini senin yerine yapıyor.
Senin Windows'un güvenlik ilkelerinde belki de oraya yazılım ile erişim kısıtlanmıştır veya kullandığın makinede UAC (Kullanıcı hesabı denetiminde) senin proje engellenecekler listesine alınmıştır.
Araştırmanı buna odaklamalısın. Bu bağlamda EmbeddedWB için özel bir ayar olmadığını bildiğine göre bunu kendin projene yaptırabilir, refresh işlemini yapabilirsin tabi yine güvenlik konusundaki engeller kalktıktan sonra.
Şimdi sana bir alternatif (kendi kullandığımdır hala da çalışıyor...)
Sadece erişmeye çalıştığın siteye özel proxy işlesin ama windows gelenine devre dışı kalsın gibi bir amacın olduğunu sezinledim. Yanlışım varsa belirt. Aşağıdaki procedure bu işi yapıyor. Senin için TEmbeddedWB olarak parametrelendirdim, ben normal TWebBrowser kullanıyorum.
(Yıllardır kullanırım. Kendi lisans sunucuma Türk Telekom ile aynı ADSL altyapısında olmasına rağmen istemcilerimden bazılarının erişmediği raporunu almıştım. Ben de anlık olarak internetten ücretsiz aktif proxy servislerini taratıp pingi düşük olanlarını sırasıyla deniyor ve günlük lisans konusunda engelleri aşıyorum.)
Kullanımı :
// isim şifre sorsun ki çalıştığını anlayın diye örneğe 'proxy.gazi.edu.tr' koydum.
Senin Windows'un güvenlik ilkelerinde belki de oraya yazılım ile erişim kısıtlanmıştır veya kullandığın makinede UAC (Kullanıcı hesabı denetiminde) senin proje engellenecekler listesine alınmıştır.
Araştırmanı buna odaklamalısın. Bu bağlamda EmbeddedWB için özel bir ayar olmadığını bildiğine göre bunu kendin projene yaptırabilir, refresh işlemini yapabilirsin tabi yine güvenlik konusundaki engeller kalktıktan sonra.
Şimdi sana bir alternatif (kendi kullandığımdır hala da çalışıyor...)
Sadece erişmeye çalıştığın siteye özel proxy işlesin ama windows gelenine devre dışı kalsın gibi bir amacın olduğunu sezinledim. Yanlışım varsa belirt. Aşağıdaki procedure bu işi yapıyor. Senin için TEmbeddedWB olarak parametrelendirdim, ben normal TWebBrowser kullanıyorum.
(Yıllardır kullanırım. Kendi lisans sunucuma Türk Telekom ile aynı ADSL altyapısında olmasına rağmen istemcilerimden bazılarının erişmediği raporunu almıştım. Ben de anlık olarak internetten ücretsiz aktif proxy servislerini taratıp pingi düşük olanlarını sırasıyla deniyor ve günlük lisans konusunda engelleri aşıyorum.)
Kod: Tümünü seç
uses UrlMon, WinInet;
procedure ProxyIleBrowser( WebBrowser:TEmbeddedWB; strURL, strUser, strPass, strProxy:String; iPort:Integer );
procedure DeleteIECache;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir : LongWord;
dwEntrySize: LongWord;
begin
dwEntrySize := 0;
FindFirstUrlCacheEntry( nil, TInternetCacheEntryInfo(nil^), dwEntrySize );
GetMem( lpEntryInfo, dwEntrySize );
if dwEntrySize > 0
then lpEntryInfo^.dwStructSize := dwEntrySize;
hCacheDir := FindFirstUrlCacheEntry( nil, lpEntryInfo^, dwEntrySize );
if hCacheDir <> 0 then
begin
repeat
DeleteUrlCacheEntry( lpEntryInfo^.lpszSourceUrlName );
FreeMem( lpEntryInfo, dwEntrySize );
dwEntrySize := 0;
FindNextUrlCacheEntry( hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize );
GetMem( lpEntryInfo, dwEntrySize );
if dwEntrySize > 0
then lpEntryInfo^.dwStructSize := dwEntrySize;
until not FindNextUrlCacheEntry( hCacheDir, lpEntryInfo^, dwEntrySize );
end;
FreeMem( lpEntryInfo, dwEntrySize );
FindCloseUrlCache( hCacheDir );
end;
var
PIInfo : PInternetProxyInfo;
begin
New (PIInfo) ;
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ;
PIInfo^.lpszProxy := PChar( Format('%s:%d', [ strProxy, iPort ]) );
PIInfo^.lpszProxyBypass := PChar('');
if strUser <> '' then begin
UrlMkSetSessionOption( INTERNET_OPTION_PROXY_USERNAME, PAnsichar(strUser), Length(strUser)+1, 0 );
UrlMkSetSessionOption( INTERNET_OPTION_PROXY_PASSWORD, PAnsichar(strPass), Length(strPass)+1, 0 );
end;
UrlMkSetSessionOption( INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0 );
Dispose (PIInfo) ;
// Önce boş işlem ile browser'in farkındalığını sağlayalım. Yoksa idrak edemiyor :)
WebBrowser.Navigate('about:blank');
// Şimdiki session için proxy ayarımız yapıldı. Artık gezinebiliriz...
WebBrowser.Navigate(strURL);
while WebBrowser.ReadyState <> READYSTATE_COMPLETE do
begin
Application.ProcessMessages;
Sleep(1);
end;
// Tarama Sessionunu kapatlım...
// Eğer ardışık sorgu yapılacak ise bu alttaki kısmı sorgular dizisinin en sonuna alalım...
InternetSetOption( nil, INTERNET_OPTION_END_BROWSER_SESSION, nil, 0 );
DeleteIECache();
end;
// isim şifre sorsun ki çalıştığını anlayın diye örneğe 'proxy.gazi.edu.tr' koydum.
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// Sadece ilgili tarama için proxy çalışır.. Sonra kendini imha eder.. :)
ProxyIleBrowser( EmbeddedWB1, 'http://www.google.com.tr', '', '', 'proxy.gazi.edu.tr', 2001 );
end;
Re: TEmbeddedWB proxy birdenbire çalışmaz oldu
Merhaba Muharrem bey,
Ayrıntılı yanıtınız için peşinen teşekkür ederim.
Önce bazı gözlemlerimden bahsedeyim:
TEmbeddedWB ile hazırladığım programda özel bir önlem almadığım halde, proxy değerlerinin sadece programla sınırlı kaldığını farkettim. Proxy kullanan programım arka planda çalışmaya devam ederken, ben istediğim başka bir browser programını açıp normal IP üzerinden sorunsuz çalışabiliyordum.
Bu özelliğin TEmbeddedWB bileşenine has bir özellik olduğunu varsaydım. Bu bileşenin üzerinde bu kadar durmamın nedeni bu. Çünkü tahmin ettiğiniz gibi, bu programın arka planda çalışmasını ve diğer internet bağlantılı işlemlerimi etkilememesini istiyorum.
Eğer proxy etkisi örneğini verdiğiniz fonksiyonla sağlanabiliyorsa, TEmbeddedWB kullanmama gerek kalmayabilir.
Bir diğer konu, Delphi'de işlem yapamaz hale gelince bu kez C# üzerinde aynı amaca yönelik bir çalışma yaptım. Algoritma aynı, tek fark, program çalıştığında proxy değişiminin her yere yansıması. Bu programcık hiç sorunsuz çalışıyor ama, benim bazı ek çalışmalardan vazgeçmemi gerektiriyor.
Verdiğiniz fonksiyonu yarın mutlaka deneyeceğim. Onu istediğim gibi çalıştırabilirsem, moralimin yeniden düzeleceğini umuyorum.
Tekrar teşekkür ediyorum.
İyi ki varsınız!
Ayrıntılı yanıtınız için peşinen teşekkür ederim.
Önce bazı gözlemlerimden bahsedeyim:
TEmbeddedWB ile hazırladığım programda özel bir önlem almadığım halde, proxy değerlerinin sadece programla sınırlı kaldığını farkettim. Proxy kullanan programım arka planda çalışmaya devam ederken, ben istediğim başka bir browser programını açıp normal IP üzerinden sorunsuz çalışabiliyordum.
Bu özelliğin TEmbeddedWB bileşenine has bir özellik olduğunu varsaydım. Bu bileşenin üzerinde bu kadar durmamın nedeni bu. Çünkü tahmin ettiğiniz gibi, bu programın arka planda çalışmasını ve diğer internet bağlantılı işlemlerimi etkilememesini istiyorum.
Eğer proxy etkisi örneğini verdiğiniz fonksiyonla sağlanabiliyorsa, TEmbeddedWB kullanmama gerek kalmayabilir.
Bir diğer konu, Delphi'de işlem yapamaz hale gelince bu kez C# üzerinde aynı amaca yönelik bir çalışma yaptım. Algoritma aynı, tek fark, program çalıştığında proxy değişiminin her yere yansıması. Bu programcık hiç sorunsuz çalışıyor ama, benim bazı ek çalışmalardan vazgeçmemi gerektiriyor.
Verdiğiniz fonksiyonu yarın mutlaka deneyeceğim. Onu istediğim gibi çalıştırabilirsem, moralimin yeniden düzeleceğini umuyorum.
Tekrar teşekkür ediyorum.
İyi ki varsınız!

Re: TEmbeddedWB proxy birdenbire çalışmaz oldu
- Deneme yaptığımda aksi şekilde çalıştı. Belki de benim hatam çünkü EmbeddedWB'nin ProxySettings.AutoLoadProxy:=true; ve RefreshProxy; şeklinde set ettiğimden bahsettiğim şekilde mimik verdi, bilemiyorum.ahmetax yazdı:Önce bazı gözlemlerimden bahsedeyim:
TEmbeddedWB ile hazırladığım programda özel bir önlem almadığım halde, proxy değerlerinin sadece programla sınırlı kaldığını farkettim. Proxy kullanan programım arka planda çalışmaya devam ederken, ben istediğim başka bir browser programını açıp normal IP üzerinden sorunsuz çalışabiliyordum.
- Her halükarda sonucu bildirin, başarılar.
Re: TEmbeddedWB proxy birdenbire çalışmaz oldu
Tekrar merhaba!
Dün gönderdiğiniz fonksiyonu üç aşamaya bölerek denemeler yaptım.
Birinci aşamada sizin fonksiyonun ilk bölümü çalışıp proxy bağlantısını kuruyor.
İkinci aşama, navigation aşaması.
İşim bittiğinde de oturum kapatma fonksiyonunu devreye sokuyorum.
Sizin belirttiğiniz proxy değerlerini denediğimde,
"Cache sunucusunu kullanamazsınız" şeklinde bir hata alıyorum. Kullanıcı adı ve parola olmadığı için proxy sunucusunun bu yanıtı verdiğini düşünüyorum.
Ancak benim elimdeki proxy listesinden seçtiğim IP ve port değerleri ile kesinlikle bağlantı kuramıyorum.
Browser boş olduğu halde hemen ReadyState 4 değerini alıyor.
ProxyIleBrowser(...) fonksiyonunu çağırmadığımda, yani proxy olmadığında, navigate fonksiyonu verdiğim siteye sorunsuz bağlanıyor.
Proxy adresi olarak IP kullanmam bir sorun değildir sanırım.
1. fonksiyon
3. fonksiyon
Proxy bağlantısından sonra Browser navigate fonksiyonunu kullanıyorum:
While döngüsü, siteye bağlantı olmadığı halde anında kırılıyor.
Şimdilik durum bu. Biraz ara verip kodları tekrar gözden geçireceğim.
Dün gönderdiğiniz fonksiyonu üç aşamaya bölerek denemeler yaptım.
Birinci aşamada sizin fonksiyonun ilk bölümü çalışıp proxy bağlantısını kuruyor.
İkinci aşama, navigation aşaması.
İşim bittiğinde de oturum kapatma fonksiyonunu devreye sokuyorum.
Sizin belirttiğiniz proxy değerlerini denediğimde,
"Cache sunucusunu kullanamazsınız" şeklinde bir hata alıyorum. Kullanıcı adı ve parola olmadığı için proxy sunucusunun bu yanıtı verdiğini düşünüyorum.
Ancak benim elimdeki proxy listesinden seçtiğim IP ve port değerleri ile kesinlikle bağlantı kuramıyorum.
Browser boş olduğu halde hemen ReadyState 4 değerini alıyor.
ProxyIleBrowser(...) fonksiyonunu çağırmadığımda, yani proxy olmadığında, navigate fonksiyonu verdiğim siteye sorunsuz bağlanıyor.
Proxy adresi olarak IP kullanmam bir sorun değildir sanırım.
1. fonksiyon
Kod: Tümünü seç
procedure ProxyIleBrowser( WebBrowser:TWebBrowser; strURL, strUser, strPass, strProxy:String; iPort:Integer );
var
PIInfo : PInternetProxyInfo;
begin
New (PIInfo) ;
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ;
PIInfo^.lpszProxy := PChar( Format('%s:%d', [ strProxy, iPort ]) );
PIInfo^.lpszProxyBypass := PChar('');
if strUser <> '' then begin
UrlMkSetSessionOption( INTERNET_OPTION_PROXY_USERNAME, PAnsichar(strUser), Length(strUser)+1, 0 );
UrlMkSetSessionOption( INTERNET_OPTION_PROXY_PASSWORD, PAnsichar(strPass), Length(strPass)+1, 0 );
end;
UrlMkSetSessionOption( INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0 );
Dispose (PIInfo) ;
// Önce boş işlem ile browser'in farkındalığını sağlayalım. Yoksa idrak edemiyor :)
WebBrowser.Navigate('about:blank');
end;
Kod: Tümünü seç
procedure SessionKapa;
procedure DeleteIECache;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir : LongWord;
dwEntrySize: LongWord;
begin
dwEntrySize := 0;
FindFirstUrlCacheEntry( nil, TInternetCacheEntryInfo(nil^), dwEntrySize );
GetMem( lpEntryInfo, dwEntrySize );
if dwEntrySize > 0
then lpEntryInfo^.dwStructSize := dwEntrySize;
hCacheDir := FindFirstUrlCacheEntry( nil, lpEntryInfo^, dwEntrySize );
if hCacheDir <> 0 then
begin
repeat
DeleteUrlCacheEntry( lpEntryInfo^.lpszSourceUrlName );
FreeMem( lpEntryInfo, dwEntrySize );
dwEntrySize := 0;
FindNextUrlCacheEntry( hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize );
GetMem( lpEntryInfo, dwEntrySize );
if dwEntrySize > 0
then lpEntryInfo^.dwStructSize := dwEntrySize;
until not FindNextUrlCacheEntry( hCacheDir, lpEntryInfo^, dwEntrySize );
end;
FreeMem( lpEntryInfo, dwEntrySize );
FindCloseUrlCache( hCacheDir );
end;
begin
InternetSetOption( nil, INTERNET_OPTION_END_BROWSER_SESSION, nil, 0 );
DeleteIECache();
end;
Kod: Tümünü seç
sproxy:='proxy.gazi.edu.tr';
port:=2001;
ProxyIleBrowser( WebBrowser2, 'http://google.com', '', '', sproxy, port );
WebBrowser2.Navigate('about:blank'); //bu satırı kullansam da kullanmasam da bir şey değişmiyor
WebBrowser2.Navigate('http://google.com');
while WebBrowser2.ReadyState <> READYSTATE_COMPLETE do
begin
Application.ProcessMessages;
Sleep(1);
end;
Şimdilik durum bu. Biraz ara verip kodları tekrar gözden geçireceğim.