将参数从Android AsyncTask发送到远程服务器

时间:2012-02-24 22:48:53

标签: android android-asynctask

我已设置代码以将远程服务器从Android应用程序调用到远程服务器。这是代码:

private class DownloadWebPageTask extends AsyncTask<String, Void, String> 
{
        @Override
        protected String doInBackground(String... theParams) 
        {
            Log.d( "Inner class: " , "Doing stuff in background" );

            String myUrl = theParams[0];
            String myEmail = theParams[1];
            String myPassword = theParams[2];

        Log.d( "Inner myURL: " , myUrl );
        Log.d( "myEmail: " , myEmail );
        Log.d( "myPass: " , myPassword );

        ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();  
        postParameters.add(new BasicNameValuePair("username", myEmail ));  
        postParameters.add(new BasicNameValuePair("password", myPassword ));            

        String response = "";

        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(myUrl);

        try 
        {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(
                        new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) 
                {
                    response += s;
                }

                Log.d( "After call, response: " , " " + response);
            } 
            catch (Exception e) 
            {
                Log.d( "Exception: " , "Yup");
                e.printStackTrace();
            }

        return response;
    }


    @Override
    protected void onPostExecute(String result) 
    {
        Log.d( "Post execute: " , "In the post-execute method" );
        //textView.setText(result);

        if ( result != null && result == "Ok")
        {
            Log.d( "Post execute: " , "OKKKK :)" );       

        }
        else
        {
            Log.d( "Post execute: " , "NOOOT  OKKKK :)" );              
        }
}    

}

这是一个要进行身份验证和登录的请求。现在您可以看到,我正在从用户那里收集登录名和密码,但不知道如何最好地将其附加到请求URL。

我可以做一些像urlString +“?login = login&amp; pass = pass但是我想知道在Android环境中是否有”良好实践“的方法吗?而且,我的网址不是htpps - 是有办法让它安全吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

安全。您的URL最有可能通过几个未加密的跃点传递到互联网。嗅探这些请求非常简单。最简单的方法是使用HttpPost在消息体中发送此数据并使用HTTPS。如果您必须使用HTTP,请尝试在此处说明的digest authenticationhow to use Digest authentication in android?

答案 1 :(得分:1)

不得不回答只是评论Heesham Saeed的“回答”(这实际上是一个指令,可以解决你的应用程序可能拥有的任何安全感):

手机(包括Android)对于心胸狭隘的人来说可能是一个烟幕,但它不是一个技术能力无法看到的黑盒子。如果用户检查代理日志,则用户可以看到手机发送的URL。检查HTTP流量路由的任何代理的日志的陌生人可以看到URL。这是Hesham的严重误解+对新发展者的误解,这些误解导致了易受攻击的应用程序的制造。

下一步...

MD5不加密! MD5无法解密!神圣的狗屎,在你说话之前得到线索,就像你有一个线索! MD5是一种单向散列算法。任何MD5哈希都可以使用Rainbow Tables IFF来反转你有足够的时间和CPU能力(并且说某人/某些东西没有这两者)。实际上,对于所有哈希算法和加密算法也是如此 - 但MD5是最不重要且耗时最少的CPU之一。 MD5不是用于保护通过未加密通道传输的数据的合适方法,或者它非常适合在接收端提取数据。