2016-04-19 19 views
0

大学で使用しているウェブサイトで自動認証を習得して実装するために、ずっと努力してきました。私は今、私は正常に私のアプリの自動認証の部分を設定していると信じていますが、今私は彼らがログイン段階を渡されたので、彼らにウェブサイトを表示する方法を知りません。私は自動認証の前にこれをどうやって行うのか知っていますが、私はJSoupを使って自動認証を行っているので、Webページを保持するDocument変数が残っています。 WebViewにドキュメントをロードして、手動でログインしたかのようにWebサイトを使用し続けることができますか、この問題を間違った方向に進めていますか?私はエラーを処理していないので、私のスレッドで.join()メソッドを使用することもできませんが、このInteruptExceptionをどこで、どのように扱うべきかはわかりません。ここで自動認証後にJSoupドキュメントをwebviewに読み込む

は私のコードは、これまでのところです:

`

import android.graphics.Bitmap; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.webkit.CookieManager; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

import org.apache.commons.codec.binary.Base64; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import java.io.IOException; 

public class MainActivity extends AppCompatActivity { 

    private String url; 
    private WebView web; 
    private Document doc; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     web = (WebView) findViewById(R.id.webView); 
     CookieManager.getInstance().setAcceptCookie(true); 
     web.getSettings().setDomStorageEnabled(true); 

     System.out.println("About to try!!!!!!!!"); 

     Thread thread = new Thread(new Runnable() 
     { 

      @Override 
      public void run() 
      { 

       String username2 = "*********"; 
       String password2 = "*********"; 
       String login = username2 + ":" + password2; 
       url = "https://hrorganiser.essex.ac.uk/"; 

       String base64login = new String(Base64.encodeBase64(login.getBytes())); 

       try 
       { 
        doc = Jsoup.connect(url).header("Authorization", "Basic " + base64login).get(); 

        System.out.println(">> Connection Successful"); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
        System.out.println(">> Connection To "+url+" Failed"); 
       } 
      } 
     }); 

     thread.start(); 
     thread.join(); 
     if (doc == null) { 
      System.out.println("Error Connecting..."); 
     } else { 
      web.loadUrl(doc.html()); 
     } 
    } 
}` 

答えて

0

あなたがJsoupで認証された場合、Jsoupの応答は、サーバからクッキーが含まれています。サーバーはあなたを識別し、認証されたユーザーであることを証明するためにこのCookieを提供します。あなたのケースでは

、あなただけJsoupクッキーを取得し、あなたのWebView使用クッキーを作成する必要があります。クッキーを取得するために

、代わりにの

doc = Jsoup.connect(url).header("Authorization", "Basic " + base64login).get(); 

あなたはを実行する必要があります。

Map<String, String> cookies = res.cookies(); // get the cookie 
Document doc = res.parse(); // get the html document 

Connection.Response res = Jsoup.connect(url).header("Authorization", "Basic " + base64login).method(Method.GET).execute(); // you might need to use "Method.POST" for the parameter for method 

その後は、クッキーを取得します

このクッキーを使用してCookieManagerを設定するだけで、WebViewをログインユーザーとして使用できるようになります。 CookieManagerがこのCookieを使用する方法の詳細については、great answer hereに従ってください。あなたのcookiesあなたが無駄に言ったこと、私が試してみましたstandard HTTP request header

+0

を次のString再フォーマットする必要があります、そしてすべての例では、オンラインで使用し、他のライブラリを実装するために私を必要としています。 CookieManager(私はjava.net.CookieManagerであると仮定しています)にCookieを追加する方法や情報を見つけることができません。 「偉大な答え」は、私が馬鹿にされていない限り、私がしていない図書館を使うようにも思えます...しかし、私が利用できるものでCookieタイプの変数を作成することはできません。また、Cookieマップは、POSTメソッドとGETメソッドの両方を使用して空であるようです。 – PythonLeech

関連する問題