2012-06-20 36 views
1

我想设置一个Android应用程序,我可以在任意代理或HTTP认证后面访问URL。也就是说,应用程序不会立即知道URL是否需要身份验证,并且会通过询问用户的凭据来响应身份验证请求,这与使用Android浏览器的方式相同。Android HttpClient反应认证

我最近编制了how to request user authentication for a WebView,响应来自浏览器的认证请求,启动对话框,并将用户推进到目标页面。我期待与HttpClient一样。

的基本过程,正如我看到它,是:

  1. 经由HttpClient.execute执行请求。
    • 如果401或407没有正确的标题,触发一个“完成”回调。
    • 否则...
  2. 弹出一个询问用户名和密码的对话框。
  3. 通过HttpClient.getCredentialsProvider().setCredentials在HTTP客户端中设置http凭证。
  4. 返回步骤1,直到用户单击取消或服务器放弃。在这种情况下,触发收到最后一个响应的“失败”回调。

我在正确的轨道上还是有人已经实施了类似的东西?我不想在这方面重新发明轮子。

回答

0

上述反应的方法做的工作。响应任意401或407请求是有效的,你需要支持你期望遇到的每个认证方案,所以像UsernamePasswordCredentials这样的东西不适用于NTLM。

0

你应该尝试authentication example的Apache网站

httpclient.getCredentialsProvider().setCredentials(
        new AuthScope("localhost", 443), 
        new UsernamePasswordCredentials("username", "password")); 

直接链接到Java文件http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientAuthentication.java

+0

对,这是我解决方案的第三步。前两个步骤验证是否存在身份验证要求(从响应中获取“AuthScope”)并显示对话框(从用户处获得“UsernamePasswordCredentials”)。如果流程中存在任何需要解决的问题,我是否真的对整个流程是否存在实施感兴趣。 –

+0

不是最终答案,但你可能想看看http://stackoverflow.com/a/10850182/808940 – Merlin

+0

也是这个http://stackoverflow.com/a/9716283/808940 – Merlin