Httpclient İle Session Alıp Webview'e Ekleme
-
Yapmak istediğim işlem https://ubs.giresun.edu.tr/login.aspx bu siteye girip HttpClient kütüphanesi ile giriş yaptırdıkdan sonra http://ubs.giresun.edu.tr/dashboard.aspx bu siteyi başka activityde WebView içerisinde göstermek istiyorum.
Giriş yaptığım zaman aldığım session "[version:0][name:ASP.NET_SessionId][value:0000000000][domain:ubs.giresun.edu.tr][path:/][expiry:null]".
Bu sessionu Intent ile diğer activity'e String şeklinde gönderiyorum ve bu activityde ki WebView'e bu session'u eklemem gerekiyor.Bu kısımda takıldım. Yardımlarınızı bekliyorum.
h0rtl4kk tarafından 28/Kas/15 23:51 tarihinde düzenlenmiştir -
private WebView web; private String url; url = "http://ubs.giresun.edu.tr/dashboard.aspx"; web = (WebView) findViewById(R.id.webview1); web.getSettings().setJavaScriptEnabled(true); web.getSettings().setPluginState(WebSettings.PluginState.ON); web.setLayerType(View.LAYER_TYPE_SOFTWARE, null); web.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); web.getSettings().setUseWideViewPort(true); web.getSettings().setLoadWithOverviewMode(true); web.getSettings().setBuiltInZoomControls(true); String postData = "kullanici_adi=" + user_name + "&kullanici_sifresi=" + password; web.postUrl(url, EncodingUtils.getBytes(postData, "utf-8")); web.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { } @Override public void onPageFinished(WebView web, String url) { } });
-
sniperscope bunu yazdı
private WebView web; private String url; url = "http://ubs.giresun.edu.tr/dashboard.aspx"; web = (WebView) findViewById(R.id.webview1); web.getSettings().setJavaScriptEnabled(true); web.getSettings().setPluginState(WebSettings.PluginState.ON); web.setLayerType(View.LAYER_TYPE_SOFTWARE, null); web.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); web.getSettings().setUseWideViewPort(true); web.getSettings().setLoadWithOverviewMode(true); web.getSettings().setBuiltInZoomControls(true); String postData = "kullanici_adi=" + user_name + "&kullanici_sifresi=" + password; web.postUrl(url, EncodingUtils.getBytes(postData, "utf-8")); web.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { } @Override public void onPageFinished(WebView web, String url) { } });
Henüz denemedim ama bu işlem WebView için gördüğüm kadarıyla. Benim yapmam gereken EditTextlere girilen kullanıcı adı ve şifre ile giriş WebView olmadan giriş yapıp, giriş işlemi doğru ise WebView'de giriş yapıldıkdan sonraki sayfayı göstermek.
-
Haci zaten bir onceki aktiviteden kullanici adi ve sifresini aliyorsun.
Intent ile aldigin veriyi
String postData =
"kullanici_adi="
+ user_name +
"&kullanici_sifresi="
+ password;
user_name ve password alanlarina yaz. Kullanicinin giris yaptiktan sonraki sayfanin adresinide
web.postUrl(url, EncodingUtils.getBytes(postData,
"utf-8"
)); url yazan kisma koy ve calistir. Gerisini WebView halleder.
-
sniperscope bunu yazdı
Haci zaten bir onceki aktiviteden kullanici adi ve sifresini aliyorsun.
Intent ile aldigin veriyi
String postData =
"kullanici_adi="
+ user_name +
"&kullanici_sifresi="
+ password;
user_name ve password alanlarina yaz. Kullanicinin giris yaptiktan sonraki sayfanin adresinide
web.postUrl(url, EncodingUtils.getBytes(postData,
"utf-8"
)); url yazan kisma koy ve calistir. Gerisini WebView halleder.
Denedim hocam fakat olmadı. postData = ""...... kısmını kullanici_adi olarakda denedim sitedeki "txtLogin:" olarakda denedim yinede giriş yapmadı.
-
selamlar,
öncelikle kodu incelemek lazım, adamlar formu göndermişler, kısaca kullanci_adi ve sifre yi parametre olarak eklemek yetmez hocam :) öyle olsaydı
siteadi.com?kullanici_adi=XXX&sifre=YYY gibi bi şey çalışması lazımdı ama çalışmıyor :) (şfire hatalı gibi bir uyarı vermesi lazım)
ama şu şekil denersen (yani formun tüm bilgilerini yollarsan
örnek
https://ubs.giresun.edu.tr/login.aspx?__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTY4OTg5OTU5MQ9kFgICAw9kFhACDw8PFgIeBFRleHQFFkludmFsaWQgY2FwdGNoYSBlbnRyeS5kZAITDw9kFgIeDGF1dG9jb21wbGV0ZQUCb25kAhcPD2QWAh8BBQJvbmQCHQ8PFgQfAAUQTG9zdCBteSBwYXNzd29yZB4LTmF2aWdhdGVVcmwFLy9VbmlGcmFtZS9sb3N0cGFzc3dvcmQvZGVmYXVsdDIuYXNweD9sYW5nPWVuLVVTZGQCIQ8PFgQfAAUqQ2xpY2sgdG8gZ2VuZXJhdGUgeW91ciBmaXJzdCB0aW1lIHBhc3N3b3JkHwIFLi9VbmlGcmFtZS9sb3N0cGFzc3dvcmQvZGVmYXVsdC5hc3B4P2xhbmc9ZW4tVVNkZAIjDxYCHwAFZjxhIGhyZWY9Ii9VbmlGcmFtZS92aWRlby9sb2dpbi5odG1sIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Ij5IZWxwIFZpZGVvPC9hPmQCJQ8WAh4HVmlzaWJsZWhkAicPZBYCAgEPDxYCHwAFBjIuMC4xOGRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBQ1JbWFnZUJ1dHRvblRSBQ1JbWFnZUJ1dHRvbkVOVoW7ms8H6tka5o6eRPkGMG4YHhY%3D&__VIEWSTATEGENERATOR=C2EE9ABB&__EVENTVALIDATION=%2FwEWBgKn5P2qDgLvqPO%2BAgLjqJ%2BWBQKG87HkBgK1qbSRCwKC3IeGDEryto%2F0Pu1c7u%2FTY7NljNMU7i84&txtLogin=adasfdsf&txtPassword=asdasdas&btnLogin=Login
kıullanıcı adı ve şifre hatalıdır diye uyarı verir, çünkü gerçek manada veriyi yollamıştır.
şimdi gördüğün gibi bazı veriler var _eventargumnent, _viewstate gibi.. bu verileri websitesi yüklendiğinde alabilmen gerekiyor. aksi halde yapcağın işlemi yine sunucu reddecektir. Bir de fazla giriş yaparsan captcha ile uğrşamak zorundasın, o zaman hepten işler karışır. ama buş şekilde session verilerini tutup giriş yapma şansın var..
arkadaşın paylaştığı kod muhtemelen çalışacaktır ancak bir kaç eksik var
1- parametreleri yukarıdaki gibi eklemen lazım. atıyorum orada 5 parametre varsa hepsini eklemen lazım tek tek
2- güvenlik önlemi olarak header kontrolü de yaptırıyorlar diye düşünüyorum. O yüzden header larına da şu tarz bigliler eklemen lazım aksi halde yine giriş yapamacaksın
kısacası biraz uğraştırıcı iş ama yolun bu şekilde olmalı..
-
soruyu ve cevapları biraz daha dikkatli okudum şöyle bir yol tavsiye edeyim bu işini kolaylaştırır..
şimdi bir activity oluştur
burada hem view olacak (hidden şekilde ve bu login sayfası açılacak)
sonra kullancı adı ve şifre diye iki textbox koy hocam. bir de buton
ilgili kişi butona tıkladığında kullanıcı adı ve şifre textboxlarındaki bilgi webview deki ilgili kısma yazılacak
buradaki bilgiler işine yarayacak http://stackoverflow.com/questions/24769555/in-android-how-can-i-set-the-value-of-a-edit-box-in-webview-using-javascript
bir nevi inject yapıyorsun. daha sonra butona tıklattıracaksın (butonu dom olarak bulup click eventini ağıracaksın ya da butona tıklandığındaki js fonksiyonunu çağıracaksın)
o zaman webview login olmaya çalışacak, load completed tamamlandığında, webview içindeki html yi kontrol ettir.. eğer içerisinde şifre geçersiz v.s. yazıyorsa o zaman kullanıcıya tekrar o textbox ları göster, eğer öyle bir veri yoksa o zaman webviewi göster.. Olay çözülmüş olur. Böylece cookie v.s. hiç bir şeyle uğraşmazsın. Sadece websitesindeki textboxlara yazdırıp butona clicklettirmek biraz uğraştıracak ama ilk söylediğim yola göre çok daha basit.