Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
15
Cevap
3194
Tıklama
0
Öne Çıkarma
Java ile Login olup veri çekmek(çözüldü)
A
10 yıl
Yarbay
Konu Sahibi

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ı >


Bu mesajda bahsedilenler: @-w K- , @baryen , @ahmtbrk58
M
10 yıl
Yarbay

Apache http client kullaniyorum ben bu tarz isler icin, login olduktan sonra cookie ve session ameleligi ile kendisi ilgileniyor.


Bu mesaja 2 cevap geldi.
B
10 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @baryen
A
10 yıl
Yarbay
Konu Sahibi

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ı >


Bu mesajda bahsedilenler: @Mephalay
B
10 yıl
Yüzbaşı

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.



A
10 yıl
Yarbay
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @-w K- , @baryen , @Mephalay
M
10 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay
Konu Sahibi

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 >
Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @Mephalay
M
10 yıl
Yarbay

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.




Bu mesajda bahsedilenler: @avatar78
M
10 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay
Konu Sahibi

Özelden linki atıyorum hocam.

Dediğin gibi header'ları yazdırmaya çalıştım, yine null çekiyor(yani header list bile gelmiyor).


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Mephalay
A
10 yıl
Yarbay
Konu Sahibi

Hallettim, sitenin sertifika sorunu varmış. Bunu hallettikten sonra login oldum, sonrası parse etmek zaten

Cevap veren hocalarıma çok teşekkür ediyorum


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @-w K- , @baryen , @Mephalay
A
10 yıl
Yarbay
Konu Sahibi

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.




Bu mesajda bahsedilenler: @-w K- , @baryen , @ahmtbrk58 , @Mephalay
B
10 yıl
Yüzbaşı

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ı >
Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay
Konu Sahibi

Teşekkürler hocam :)




Bu mesajda bahsedilenler: @baryen
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.