2011-09-28 14 views
30

Ho un'applicazione Android che consiste in un WebWiew e ho bisogno di accedere a un sito automaticamente utilizzando il codice. Ho provato a utilizzare postUrl() e sembra funzionare ... ma solo su alcuni siti.Come inviare i dati POST con il codice in una web view Android

Ecco il codice che sto utilizzando:

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")); 
    } 
} 

Questo funziona grande per dropbox.com, ma anche altri siti come google.com, facebook.com, ecc basta caricare la pagina di login o dare un errore (google.com fornisce un errore nel dire che devo abilitare i cookie).

In questo momento sto solo andando i dati del post a mano; guardando il modulo di login per il sito e inserendo i campi nome/valore nel postData nel mio codice. Su siti come google, il modulo di login ha molti campi nascosti e li ho aggiunti anche ai postData.

Se qualcuno potesse darmi un'idea di qualcosa che sto sbagliando per favore fammi sapere, sono piuttosto confuso su questo.

risposta

14

Provare a sostituire "utf-8" (nel 2 ° parametro) con "BASE64".

+1

Hi an00b. Grazie per la risposta! Credo di aver provato questo senza fortuna. Non sto più lavorando su questo specifico problema, ho deciso di seguire una strada separata. Ti voterò comunque, perché apprezzo molto la risposta. – javajavajavajavajava

+0

"BASE64" non è un set di caratteri, quindi potrebbe funzionare (a seconda del postData) ma potrebbe anche fallire. Il modo corretto è codificare il postData in "application/x-www-form-urlencoded", che può essere eseguito con URLEncoder.encode (postData, "UTF-8"); – raudi

+0

raudi puoi mettere una risposta con un frammento usando "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

Ho letto il codice sorgente di EncodingUtils.java in Android [HERE] (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 ")' come 'postData.getBytes() '. Basta usare 'postData.getBytes()' invece di EncodingUtils. (Se è necessario migrare ad Android M (API 23) senza EncodingUtils) – Johnny

+0

Hai salvato il mio amico giorno. – 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()); 
Problemi correlati