Şimdi Ara

Java ile Login olup veri çekmek(çözüldü)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
16
Cevap
1
Favori
2.697
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Final:https://play.google.com/store/apps/details?id=com.hp2m.GaziPlus&hl=tr

    --------------------------------------------------------------------------------------------------------------------------------

    İyi bayramlar hocalarım, ufak bir tane sorum olacak boş zamanınız olursa ilgilenirsiniz umarım

    İnternette bir siteden veri çekmem gerek. Normalde jsoup kullanırdım, hala kullanırım ama veriyi çekebilmek için önce siteye login olmak gerekiyor. Login olacak şifre vs elimde var, bunları kullanarak asıl sayfayı nasıl çekerim bilemedim. Hayır elimde db yok, son çare olarak onu isteyeceğim.

    Sorunumu açıklamak için bir örnek vereyim:
    -Misal dh den bir kullanıcı, id pass giriyor ve uygulama, jsoup(veya herhangi bir html parser)ile mesajımin geçtiği konular tablosunu tamamıyla string olarak çekiyor.

    Ek: Sanırım bir "session" açmam gerek.

    Ek2: Jsoup un kendi login methodu varmış, denemedim ama olur gibi.
    http://stackoverflow.com/questions/20840655/how-to-create-a-session-using-jsoup-and-how-to-post-the-data-using-jsoup

    Son Güncelleme: Sertifika sorunu alıyordum, onu hallettikten sonra login olabildim.



    < Bu mesaj bu kişi tarafından değiştirildi avatar78 -- 13 Ekim 2015; 22:05:50 >
    < Bu ileti mobil sürüm kullanılarak atıldı >







  • Apache http client kullaniyorum ben bu tarz isler icin, login olduktan sonra cookie ve session ameleligi ile kendisi ilgileniyor.
  • login işlemleri zaten tamamiyle session a dayalı. login sayfasındaki id şifreyi sen kaynak koduna bakarak nereye post edildiğini öğrenip ona post ederek giriş yap. sonra gelen data'da session olacaktır. onu kaydet. geri kalan işlemlerin hepsini aynı şekilde kaynak koddan bulup post-get gibi methotlar kullanarak yapacaksın. Dönen veriyi zaten kendin işlersin.
  • baryen B kullanıcısına yanıt
    Hocam burada timeout süresi var, session in ne kadar açık kalacağını ayarlıyor anladığım kadarıyla. Çok bir sayı girsem veri kullanımı artar mi bi fikriniz var mi?

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Mephalay M kullanıcısına yanıt
    Hocam ona da bakıyorum şimdi ama jsoup daha kolay gözüküyor. Aşağıdaki tutorialden baktim da bu kadar kapsamlı olması kafa karıştırıyor kolay bir iş için. Daha sonrasi için Volley kullanmayi düşünüyorum http yerine.

    http://www.vogella.com/tutorials/ApacheHttpClient/article.html

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: avatar78

    Hocam burada timeout süresi var, session in ne kadar açık kalacağını ayarlıyor anladığım kadarıyla. Çok bir sayı girsem veri kullanımı artar mi bi fikriniz var mi?


    bağlantı zaman aşım süresinden bahsediyorsanız bağlantı kurulup gelen giden veri bittiğinde zaten otomatik kapanacaktır bağlantı.

    Linkte vermiş olduğunuz yöntemi kullanıyorum bende kendi uygulamalarımda.

    sürekli açık bağlantıya gerek yok. mesela 5 dk lık session süresi atanmış olsun sunucu tarafından. siz giriş yapın. size session atasın. yapacağınız program sessiongeldikten sonra ram de tutsun o değeri. hiç işlem yapmayıp en son saniye işlem yapsanız sadece yaptığınız girişi işlemi ve son saniyede yaptığınız işlem veri kullanımına yansır. çünkü arada başka gidip gelen veri yok. ama açık bağlantı, oyun ,anlık güncellemeler vb gibi derseniz onlar hakkında pek bir fikrim yok.
    ayrıca session programda silinmese bile sunucuda silinirse tekrar giriş yapmak zorunda kalacaktır.

    bir internet sitesine uygulama yapmak için :
    site sizinse uygulama için sunucuya ayrı kodlar yazmak
    sizin değil ise tekbir site için özelliştirilmiş internet tarayıcısı gibi olacaktır.

    yaptığınız buton session ile buton değeri vb sitedeki butonun adresine post edecek. gelen "response" u ise gendi içinde istediği değerleri alıp kullanıcıya istediği gibi gösterecektir. Şu kısımda tek uğrasacağınız kısım neyi nereye post edeceği ve gelen veriyi düzenleme kısmı bana kalırsa.




  • Yok malesef beceremedim, daha "session id" yi çekemiyorum, sürekli null geliyor.

    Birisi çalışan bir kodunu atabilir mi? Benimkileri paylaşayım, 2 yöntem var ikisinde de null geliyor.

     
    Connection.Response res = Jsoup.connect("site linki")
    .method(Connection.Method.GET)
    .timeout(10000)
    .execute();
    String sessionID = res.cookie("buraya jsessionid");


     HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet("link");
    HttpResponse httpResponse = client.execute(httpGet);
    String a = httpResponse.getFirstHeader("Set-Cookie").getValue();


    Dediğim gibi iki method da null çekiyor. Acaba jSessionID'yı mi yanlış aldım diyeceğim ama zannetmiyorum. Birisi çalışan bir kod paylaşırsa çok memnun olacağım.




  • quote:

    Orijinalden alıntı: avatar78

    Yok malesef beceremedim, daha "session id" yi çekemiyorum, sürekli null geliyor.

    Birisi çalışan bir kodunu atabilir mi? Benimkileri paylaşayım, 2 yöntem var ikisinde de null geliyor.

     
    Connection.Response res = Jsoup.connect("site linki")
    .method(Connection.Method.GET)
    .timeout(10000)
    .execute();
    String sessionID = res.cookie("buraya jsessionid");


     HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet("link");
    HttpResponse httpResponse = client.execute(httpGet);
    String a = httpResponse.getFirstHeader("Set-Cookie").getValue();


    Dediğim gibi iki method da null çekiyor. Acaba jSessionID'yı mi yanlış aldım diyeceğim ama zannetmiyorum. Birisi çalışan bir kod paylaşırsa çok memnun olacağım.

     


    //initial connection.
    String url = "http://www.google.com/search?q=Mephalay";
    HttpClient client = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet(url);
    request.addHeader("User-Agent", "Unix");
    HttpResponse response = client.execute(request);
    if(200==response.getStatusLine().getStatusCode()){
    List<String> cookies = new ArrayList<String>();
    Header[] headers =response.getAllHeaders();
    for (Header header : headers) {
    if("Set-Cookie".equals(header.getName())){
    cookies.add(header.getValue());
    }
    }
    StringBuilder sb = new StringBuilder();
    for (String cookie : cookies) {
    sb.append(cookie);
    }
    System.out.println("Cookie="+ sb.toString()); //burdan sonrasi parse.
    //TODO Parse cookie for session id.
    }else{
    System.out.println("Failed to fetch html data with 200 code."); // 200 degilse fail msg i veriyoruz.
    }


    Kodu baglanacagin siteye gore modifiye etmen gerekecektir buyuk ihtimalle. Ama bu is gorur diye dusunuyorum.




  • Mephalay M kullanıcısına yanıt
    Hocam senin kod çalışıyor, bu şekilde cookie alabiliyorum ama her siteden değil(bana lazım olan siteden de alamadım, null çekiyor).

    Siteye göre modifiye derken neyi kastettiniz? request.addHeader'lardan bahsediyoruz değil mi? Ne eklemem gerektiğini nasıl anlayacağım? Hiçbir header eklemezsek de cookie alabilir miyiz?



    < Bu mesaj bu kişi tarafından değiştirildi avatar78 -- 23 Temmuz 2015; 0:12:33 >
  • avatar78 kullanıcısına yanıt
    O halde senin baglanmaya calistigin site Set-Cookie header i gondermiyor, ya da redirect yapiyor yaptigi yerde cookie set ediyor. Eger sorun degilse siteyi soyle ya da null geldigini soyledigin kodu paylas bakalim header' da neler geliyor.
  • quote:

    Orijinalden alıntı: avatar78

    Hocam senin kod çalışıyor, bu şekilde cookie alabiliyorum ama her siteden değil(bana lazım olan siteden de alamadım, null çekiyor).

    Siteye göre modifiye derken neyi kastettiniz? request.addHeader'lardan bahsediyoruz değil mi? Ne eklemem gerektiğini nasıl anlayacağım? Hiçbir header eklemezsek de cookie alabilir miyiz?

    Header eklemek zorunda degiliz. Ilk request yapan biz oldugumuz icin site bizim yaptigimiz request e gore cookie gonderiyor olabilir. Ornegin Linux ya da windows kullanicisi olup olmamana bagli olarak farkli cookie set edecektir belki. Ya da kullandigin tarayici Internet Explorer sa farkli, chrome sa farkli davranacaktir gibi. Bunu test edip gormek gerek dedigim gibi. Istiyorsan kodu debug edip header list de neler geldigine bir bak.
  • Mephalay M kullanıcısına yanıt
    Özelden linki atıyorum hocam.

    Dediğin gibi header'ları yazdırmaya çalıştım, yine null çekiyor(yani header list bile gelmiyor).
  • Hallettim, sitenin sertifika sorunu varmış. Bunu hallettikten sonra login oldum, sonrası parse etmek zaten

    Cevap veren hocalarıma çok teşekkür ediyorum
  • Hocalarım merhaba konuyu güncelleyeyim, uygulamam 1 ay önce bitti, linki aşağıya koyuyorum. Olur da bakarsınız ne eksiğim var, daha ne ekleyebilirdim gibisinden yorumlara ihtiyacım var. Yardım edenlere sonsuz teşekkür, sayenizde projeyi başarıyla tamamladım

    https://play.google.com/store/apps/details?id=com.hp2m.GaziPlus&hl=tr

    not: girişte beta tester olarak girebilirsiniz.
  • Oncelikle tebrik ederim.
    Material Desing gerçekten iyi duruyor. Çok güzel tasarımı var.
    Hayırlı olsun :)

    Not : uzun süre forumda degildim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • baryen B kullanıcısına yanıt
    Teşekkürler hocam :)
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.