通过应用程序通过HttpPost登录到网站(Logging in via HttpPost to a

2019-07-30 06:59发布

你好Stackoverflowers!

我写了一个相对简单的应用程序,包含一个登录文本字段,密码文本字段以及登录按钮的。

我的目标是,当用户输入登录信息和触摸登录按钮,应用程序将用户登录到我指定的网站,并在不同的意图或网页视图中打开它。 我目前的实施打开了一个新的活动具有的WebView,并通过在登录信息。 我的代码是新的活动如下:

setContentView(R.layout.web);


    try {
        //add the users login information(username/pw) to a List
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("email", "random@gmail.com"));
        nameValuePairs.add(new BasicNameValuePair("password", "password1"));

        //declare a new HttpClient
        HttpClient httpclient = new DefaultHttpClient();

        //set the HttpPost to the desire URL
        HttpPost httppost = new HttpPost(URL_STRING);

        //set the entity to a new UrlEncodedForm with the login info and type
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));

        //store the response
        HttpResponse response = httpclient.execute(httppost);

        //get the data from the response
        String data = new BasicResponseHandler().handleResponse(response);            

        //get the webview from the xml
        WebView webview = (WebView)findViewById(R.id.webView);

        webview.setWebViewClient(new WebViewClient() {  
            @Override  
            public boolean shouldOverrideUrlLoading(WebView view, String url)  
            {  
                view.loadUrl(url);  
                return true;  
            }  
        }); 

        //load the return website from the server
        webview.loadDataWithBaseURL(httppost.getURI().toString(), data, "text/html", HTTP.UTF_8, null);

这成功登录我的URL(HTTPS站点)和打开的页面,但是如果你尝试点击任何网站,它把你返回到登录页面中的WebView的按钮,它不会显示多网站(图表/图形)上的属性。

难道这是一个cookie的事情吗?

那么,有没有办法通过一个新的intent发送的登录信息? 还是有我的WebView实现的解决方案?

(这里是从来没有得到一个明确的答案比较类似(ISH)问题的Android SSO(单点登录)的应用程序 )

感谢您的时间! 我真的很感谢你考虑看看我的问题。

编辑 :那么giseks的解决方案为我让网页留的WebView内,但是图表/图形/等的页面仍然没有显示上,该解决方案是为启用JavaScript的WebSettings一样简单

webview.getSettings().setJavaScriptEnabled(true);

下面是谷歌的Android的WebSettings API供参考: WebSettings

这帮助了我,我希望它可以帮助你!

Answer 1:

我的猜测是你的应用程序不处理cookie的权利。 看看这个问题,它可以帮助。

的WebView和Android上的饼干

编辑

在你的代码似乎只传递从请求到的WebView检索到的HTML。 饼干似乎迷路的地方。 我建议你另一种方法。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView webv = (WebView)findViewById(R.id.MainActivity_webview);         
    webv.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    });

    String postData = FIELD_NAME_LOGIN + "=" + LOGIN +
            "&" + FIELD_NAME_PASSWD + "=" + PASSWD;

    // this line logs you in and you stay logged in
    // I suppose it works this way because in this case WebView handles cookies itself
    webv.postUrl(URL, EncodingUtils.getBytes(postData, "utf-8"));
}


文章来源: Logging in via HttpPost to a website via an application