在我的浏览器,或在iOS上,当我试图让与编码HTTP认证信息的URL的内容,形式如何从Android中的URL使用http认证信息?
http://myUser:[email protected]/secure/area/index.html
这只是工作。我从Web服务获取URL,并且如果可以帮助的话,我想避免尝试解析它们的HTTP认证信息。有没有办法在没有真正解析URL的情况下在Android中做类似的事情?或者,最好的方法是什么?
更新: 我发现,当我尝试在授权标头中设置身份验证信息时,出现一个非常奇怪的FileNotFoundException。
下面是我使用的代码:
URL url = new URL(urlString);
URLConnection connection;
String authority = url.getAuthority();
if (authority.contains("@")) {
String userPasswordString = authority.split("@")[0];
url = new URL(urlString.replace(userPasswordString + "@", ""));
connection = url.openConnection();
String encoded = new String(Base64.encode(userPasswordString.getBytes(), Base64.DEFAULT), "UTF-8");
connection.setRequestProperty("Authorization", "Basic " + encoded);
} else {
connection = url.openConnection();
}
InputStream responseStream = connection.getInputStream();
所有的信息似乎要结账,我已经验证的网址是否正确,以base64字符串是正确的,该文件肯定是在服务器上 - 我用Firefox打开它并没有什么问题,Firebug显示了所有正确的标题,与我发送的内容相匹配。我得到虽然是以下错误(URL主机改变,以保护无辜):
java.io.FileNotFoundException: http://a1b.example.com/grid/uploads/profile/avatar/user1/custom-avatar.jpg
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1061)
任何想法这是什么一回事?
我看着使用HttpClient,但看到在Issue 16041建议我们更喜欢URLConnection。
更新的问题 – 2011-05-12 15:40:32