2011-09-28 18 views
30

私はWebWiewで構成されたアンドロイドアプリケーションを持っており、コードを使用して自動的にサイトにログインする必要があります。私はpostUrl()を使って試してみましたが、うまくいくようですが、いくつかのサイトでのみです。ここで アンドロイドウェブビューでコード付きのPOSTデータを送信する方法

は、私が使用しているコードです:

public class webviewActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WebView webview = new WebView(this); 
     setContentView(webview); 
     WebSettings webSettings = webview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     webview.setWebViewClient(new WebViewClient()); 

     String postData = "[email protected]&login_password=myPassword"; 
     webview.postUrl("https://www.dropbox.com/login", EncodingUtils.getBytes(postData, "utf-8")); 
    } 
} 

これはdropbox.comため素晴らしい機能しますが、google.com、facebook.com、などのような他のサイトは、単にログインページをロードしたり、与えますエラー(google.comにはCookieを有効にする必要があるというエラーが表示されます)。

今私はちょうど手で投稿データを行っています。サイトのログインフォームを見て、名前/値フィールドを私のコードのpostDataに入れてください。 Googleのようなサイトでは、ログインフォームには多くの非表示フィールドがあり、私もpostDataにそれらを追加しています。

私が間違っていることを誰かに教えてもらえれば教えてください。私はこれについてかなり混乱しています。

答えて

14

"utf-8"(2番目のパラメータ)を"BASE64"に置き換えてください。

+1

こんにちはan00b。答えをありがとう!私は運がないとこれを試したと信じています。私はこの特定の問題に取り組んでいません、私は別のルートを行くことにしました。とにかく、私は本当に答えに感謝するので、私はあなたの投票をします。 – javajavajavajavajava

+0

"BASE64"には文字セットがありません。これは(postDataによって)うまくいく可能性がありますが、失敗する可能性があります。適切な方法は、URLEncoder.encode(postData、 "UTF-8")で行うことができる、 "application/x-www-form-urlencoded"にエンコードすることです。 – raudi

+0

raudiは "application/x-www-form-urlencoded"を使ってスニペットで答えをつけることができます – D4rWiNS

11
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    WebView webView = new WebView(this); 

    setContentView(webView); 

    String url = "http://example.com/somepage.php"; 
    String postData = "postvar=value&postvar2=value2"; 

    webView.postUrl(url, EncodingUtils.getBytes(postData, "base64")); 
} 
+13

私はAndroidの[EncoderUtils.java]のソースコードを読んでいます(http://grepcode.com/file/repo1。 maven.org/maven2/org.apache.httpcomponents/httpcore/4.4/org/apache/http/util/EncodingUtils.java#95) 'EncodingUtils.getBytes(postData、" base64 ")' postData.getBytesと同じです。 () 'を返します。 EncodingUtilsの代わりに 'postData.getBytes()'を使うだけです。 (EncodingUtilsを使用しないでAndroid M(API 23)に移行する必要がある場合) – Johnny

+0

私の一日の仲間を保存しました。 – NinjaCoder

+0

https://developer.android.com/reference/org/apache/http/util/EncodingUtils.html –

0
WebView myWebView = (WebView) findViewById(R.id.webview); 

String url="http://www.example.org/login"; 

String postData= 
       "username="+URLEncoder.encode("abc","UTF8")+ 
       "&password="+URLEncoder.encode("***", "UTF-8"); 

myWebView.postUrl(url,postData.getBytes()); 
関連する問題