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 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
java.io.EOFException:ZLIB输入流的意外结束 - 从HTTP读取
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )