web-dev-qa-db-fra.com

Comment envoyer POST données avec code dans une vue Web Android

J'ai une application Android qui consiste en une WebWiew et je dois me connecter automatiquement à un site à l'aide de code. J'ai essayé d'utiliser postUrl() et cela semble fonctionner ... mais uniquement sur certains sites.

Voici le code que j'utilise:

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

Cela fonctionne super pour dropbox.com, mais d’autres sites comme google.com, facebook.com, etc. chargent simplement la page de connexion ou donnent une erreur (google.com donne une erreur disant que je dois activer les cookies).

En ce moment, je vais juste les données de poste à la main; regarder le formulaire de connexion pour le site et mettre les champs nom/valeur dans le postData dans mon code. Sur des sites tels que Google, le formulaire de connexion contient de nombreux champs cachés et j'ai également ajouté ceux-ci à postData.

Si quelqu'un pouvait me donner une idée de quelque chose que je faisais mal, faites-le-moi savoir, je suis plutôt confus à ce sujet. 

30

Essayez de remplacer "utf-8" (dans le 2e paramètre) par "BASE64".

15
an00b
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"));
}
11
Laxman
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());
0
pruthwiraj.kadam