Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi
Ön Sipariş Talebinde Bulunan Üyelerimiz
Sipariş Talebinde Bulunan Üyelerimiz

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Sayfa içeriği gizlenmiş sayfadan veri çekme
#1
Merhaba, idhttp.get ile bir siteden veri çekmek istedim. Fakat bilmediğim bir konuyla karşılaştım. Chrome gibi tarayıcıyla ilgili sayfanın Kaynak Kodunu Görüntüle dediğimde farklı içerik , incele diyerek görüntülediğimde farklı içerik geldi. Idhttp.get ile incele diyerek aldığım html içeriği alamadım bunu nasıl alırım ? Bunun sebebi nedir.

GmzlBy.jpg
Cevapla
#2
idhttp ile html + css + javascprit kodunu karşı sunucudan soketten alırsın, ve id http bunu sana geri yazı olarak döndürür,
id httpnin olayı burada sona erer, senin burada gördüğüm webbrowserin sayfa içindeki bu css javascprit kodların yorumlanmış hali,
misal o js kodu derki git şu divin şu parametreleri değiştir,

yani js kodlar esasında webbrowser a sayfa içinde işlem yaptırmak için komutlar yollar, js komutları browser da çalışır, server(sunucu) tarafında değil,
bu javascprit komutlarıda misal bir ajax adresinden alınan parametrelere göre değişir, işte bu nedenle senin soketten aldığın html ile webbrowser dan incele yaptığında gördüklerin arasında fark vardır,
webbrowser da gördüklerin yorumlanmış o anki halidir, dediğim gibi senin bu elements tabına değilde network tabına fokuslanman gerekir, idhttp ile ajax adresine istek göndermek istiyorum diyorsan şöyle yani;

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
..
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
..

sonuç olarak yukarıdaki gerekli parametreleri idhttp.post dan önce set ettikten sonra postu gönderirsen, doğal bir webbrowser client den geliyormuş gibi görünür ve işleme alınır.
daha öncede yazdım post ettiğin url (idhttp.post(Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol)) ise idhttp postu gönderecekdir ama site https ise kütüphaneler gerekir idhttp direk hataya düşer.


ek olarak misal; bazı sayfalarda javscprit kodları browser tarafından çalıştırıldıklarında özel kod üretirler, sen onu ne webserver dan soketten nede html içinden o değeri göremezsin,
sayfa post edildiğinde o "webbrowserda çalışıp hesaplama yapan javascprit kodu" bu ürettiği değeride sunucuya gönderir, sende o javascprit kodunu çalıştırmadığın için ve hesaplanan değeri göndermediğin için webserver senin isteğini işleme almaz, çünkü kendisindeki ile eşleşmiyordur, sahte bir client olduğunu algılar, gibi daha spesifik durumlarda karşına çıkar, uğraştığın hedefle ilgili,
bunu niye yazdım? senin 1.resmin en üstünde cloudflarenin js leri var, muhtemelen site proxy leniyor cf üzerinden, onun olayı saldırı engellemedir temelde bu tarz denetimler yapar, uzman göz kaynak koda ve sunucuya baktığında görür, nerede ne var ne yapılması gerekir vs, burada yüzeysel olarak durumu açıkladım, çokca alanı var işin sadece olay post göndermek değil, sonra uğraşır durursun bu kod niye çalışmıyor diye..
Cevapla
#3
Emeğinize sağlık, çok teşekkürler harika bir açıklama olmuş. Anladığım kadarıyla buradan veri çekmek için yeterli bilgim olmadığı için bu bilgiyi çekemeyeceğim. Smile Yine hüsran yine. Konu beni aştı..
Cevapla
#4
Tam vazgeçme aşamalarındayken sayenizde yine ümitlendim Smile  Dediğiniz üzere tarayıcının network kısmından sitenin reuquest url sini buldum ve metodunu buldum.
Gördüm ki site https  ve get metodu kullanıyor. idhttp ssl hatası ile uğraşmamak adına bende NetHTTPClient.Get ile bilgiyi çektim. Bilgi json olarak geldi.
Şimdi tek sorun bu json veriyi nasıl ayrıştıracağımda. Bunu nasıl yapacağımı bilmiyorum bir sürü json parse şekli gösterilmiş.  Açıkcası buda kafa karıştırıcı 
Aşağıdaki json çıktısında , id ve balls kısmını parselemeyi deneyeceğim. 
{"game":{"id":37382,"is_current_game":true,"balls":"10,29,57,43,63,11,49,48,20,67,37,21,39,24,54,72,61,14,15,3,27,68,66,59,7,4,46,75,1,73,83,31,90,40,47,22,12,25,18","ball_x":80,"result":false,"c_1":"92","c_2":"","tombala":"","tulum":"","video_url":"","end_at":"0001-01-01T00:00:00Z","created_at":"2019-01-09T12:54:16.475Z","updated_at":"2019-01-09T12:54:16.475Z"}}

Cevapla
#5
Merhaba,
Aşağıdaki gibi basit bir metod ile halledebilirsiniz.
procedure TForm1.Button1Click(Sender: TObject);
  function GetArsJSONdanBirDegerAl(jsonMetin, AlanAdi: String): String;
  var
    Params: TJsonObject;
  begin
    Params := TJsonObject.ParseJSONValue(TEncoding.UTF8.GetBytes(jsonMetin), 0)
      as TJsonObject;
    Result := Params.GetValue<string>(AlanAdi);
  end;

begin
  Memo2.Lines.Add(GetArsJSONdanBirDegerAl(Memo1.Text, 'game.id'));
  Memo2.Lines.Add(GetArsJSONdanBirDegerAl(Memo1.Text, 'game.balls'));
end;
Not: Uses bölümüne System.JSON eklemelisiniz.

   
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
Çok teşekkürler Fesih bey bende konuyu araştırıyordum.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  iç içe döngüyle excelden veri tabanına kayıt alma sorunu? baloglurecep 2 28 1 dakika önce
Son Yorum: baloglurecep
  TResourceStream - Alt Exe belgesine veri gönderme - FindResourceEx - Genereic_Write eroniko 4 160 31-12-2018, Saat: 16:40
Son Yorum: eroniko
  Excel den Delphi ye veri çekme nmtsltn 1 154 26-12-2018, Saat: 11:32
Son Yorum: DelphiCan Yönetim
  Comport Library porta veri gönderme hatası baloglurecep 8 238 25-12-2018, Saat: 09:12
Son Yorum: frmman
  web üzerinden veri kaydetme ve veri çekme murtishow76 6 330 15-12-2018, Saat: 19:53
Son Yorum: masteryoda



Konuyu Okuyanlar: 1 Ziyaretçi