Delphi Can

Orjinalini görmek için tıklayınız: idhttp yenileme
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
idhttp ile ilgili makaleden yola çıkarak , bir siteye bağlanıp veri almayı başarabildim. Fakat orada anlamadığım bir konu var. Aşağıdaki şekilde giriş yaptıktan sonra farklı bir adrese yönleniyorum.  Fakat 3 saniyede bir gelen bilgiyi yenilemek için  IdHTTP.Get('http://deneme')  şeklinde bilgi çekmek istediğimde program kırılıyor. Sebebini anlayamadım. Tekrar idhttp create edip denedim session düştü. Belli aralıklarla yenilemek için ne yapmalıyım hatam nerede ?

function baglan(const username, password: string): string;
var
IdHTTP: TIdHTTP;
Request: TStringList;
begin
try
  Request := TStringList.Create;
  try
     Request.Add('work=login');
     Request.Add('login_user='+username);
     Request.Add('login_pass='+password);
    IdHTTP := TIdHTTP.Create;
    try
      IdHTTP.AllowCookies := True;
      IdHTTP.HandleRedirects := True;
      IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
      IdHTTP.Post('http://deneme/src/api.php', Request);
      Result := IdHTTP.Get('http://deneme');
      if StrUtils.ContainsStr(Result, 'GİRİŞ YAP') then //Login başarısız 
        Result := '' else begin
          Result := IdHTTP.Get('http://deneme/salon.html?id=1');
        end;
    finally
     // IdHTTP.Free;
    end;
  finally
    Request.Free;
  end;
except
  Result := '';
end;
end;
"Program Kırılıyor" derken, bir hata mesajı mı alıyorsunuz; eğer öyle ise hata mesajı nedir ? IdHttp'yi Free etmemişsiniz, memory leak var. Ayrıca bir alışkanlık olması açısından belirteyim; create edeceğiniz nesneleri try'ın üstünde tanımlayın. Create silsilesinde bir hata oluşur ise bu durumda nesne oluşmamış oluşur, dolayısı ile Request (sizin örneğiniz için) rastgele bir şey ile dolu olur ve Free edilmesi çok büyük olasılıkla Access Violation hatasına neden olur.
access violation hatası ile kırılıyordu. Bende fonksiyon içinde idhttp yi create ederek kullanmaktan vazgeçip formuma ekledim. Yanlız şöyle bir sorun var, idhttp get ile sayfayı aldığımda , html içerikler geliyor ama Ajax ile üretilen içerikler gelmiyor. Eee şimdi ne yapcaz bu hiç olmadı Smile))
(08-01-2019, Saat: 09:36)CesuR Adlı Kullanıcıdan Alıntı: [ -> ]access violation hatası ile kırılıyordu. Bende fonksiyon içinde idhttp yi create ederek kullanmaktan vazgeçip formuma ekledim. Yanlız şöyle bir sorun var, idhttp get ile sayfayı aldığımda , html içerikler geliyor ama Ajax ile üretilen içerikler gelmiyor. Eee şimdi ne yapcaz bu hiç olmadı Smile))

Json tipinde veri almayı deneyin
O şekilde de bir deniyeyim üstadım. Umarım olur
Programın nerede kırıldığını göstermeden, size isabetli yanıt vermek çok zor olur. Programın kırıldığı noktada break button'una basıp kod ortamına geçin ve Call Stack'a bakın. Sizin için bundan daha güzel yardımcı olmaz emin olun.
Evet haklısınız. Teşekkürler
Haklısınız . Şöyle özetliyeyim  idhttp ile siteye bağlanıyor içeriği çekiyorum.  İçerikte  class adı act olan bir div var bu divin içindeki rakam her 5 saniyede bir değişiyor. Amacım her beş saniyede bir buradaki bilgiyi almak. 
PHP Kod:
<div class="act"><span>61</span></div


şu şekilde ne kadar çekersem çekeyim gelen sonuç hiç değişmiyor. Div içinde gelen rakam hep 61 oysa oradaki rakam hep değişiyor.

procedure test;
   var
 get_url: string;
 resp: TMemoryStream;
begin
 get_url := 'http://xxxx/salon.html?id=1';
 resp := TMemoryStream.Create;
 try
   Form1.IdHTTP1.Get(get_url, resp);
   resp.Position := 0; // <-- add this!!
   form1.memo1.Lines.LoadFromStream(resp);
 finally
   resp.Free;
 end;
end;
"Post" metosunu deneyin. "Get", program kapanıp açılmadığı sürece hafızadaki bilgiyi getirir.
Onuda denedim sonuç aynı teşekkürler