Android 中 HttpURLConnection 的 HTTP 身份验证

Posted

技术标签:

【中文标题】Android 中 HttpURLConnection 的 HTTP 身份验证【英文标题】:HTTP Authentication for HttpURLConnection in Android 【发布时间】:2012-01-26 18:44:33 【问题描述】:

我的应用需要连接到多个服务器,每个服务器都有自己的用户名/密码对。但是,android 的 javadoc 中提供的示例并未考虑具有不同用户名/密码集的多个主机:


 Authenticator.setDefault(new Authenticator() 
     protected PasswordAuthentication getPasswordAuthentication() 
       return new PasswordAuthentication(username, password.toCharArray());
   );
 

这会设置 VM 范围的身份验证处理程序,并且无法识别我们正在尝试连接的主机。有没有办法可以使用 HttpUrlConenction 并使用不同主机的不同用户/通行证处理 HTTP 身份验证?

【问题讨论】:

【参考方案1】:

使用 Authenticator 的 getRequestingHost() 方法。

Authenticator.setDefault(new Authenticator() 
    protected PasswordAuthentication getPasswordAuthentication() 
        if (this.getRequestingHost() != null)
            if (this.getRequestingHost().contains("a-site.com")
                return new PasswordAuthentication(aUsername, aPassword.toCharArray());
            else if (this.getRequestingHost().contains("b-site.com")
                return new PasswordAuthentication(bUsername, bPassword.toCharArray());
        return null;
    );
)

【讨论】:

以上是关于Android 中 HttpURLConnection 的 HTTP 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

json协议

安卓开发:SmartImageView简单实现和应用

java.io.EOFException:ZLIB输入流的意外结束 - 从HTTP读取

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它