2014-12-02 31 views
0

所以我想登录到使用基本身份验证登录的网页。通过基本身份验证登录,然后打开浏览器

如果我使用Authorization Header发送HTTP Get,我会以HTML的形式获得成功响应。但后来,它再次问我,登录,因为它不记得,我已经登录

所以我的问题是:

我如何保存这些信息,我已经登录?

我知道,我之前已经提出过这个问题,但由于没有人在另一个线程上回答我最后的希望是打开另一个线程。

另一个线程:Android doesnt notice when i do an WWW-Authenticate


编辑:

所以我想要做的是:

Intent browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse("The Website with the Authentication")); // Here, i want to add the request header 
     handler.startActivity(browserIntent); 

但我不知道怎么样,因为,你唯一可以发送意图是Url(并且没有请求头)。

希望这可以让事情更清楚。

回答

0

基本认证不保存服务器端的状态。每个请求都要求您提供登录信息。

通常会发生什么事是:

  1. 浏览器发出的URL请求,缺乏任何认证。
  2. 服务器返回代码401,该URL需要基本认证。
  3. 浏览器询问(用户或其自己的某个数据库)的用户名和密码。如果它向用户询问密码,浏览器会将用户名/密码存储在内部数据库中,并将其输入到该URL中。
  4. 对于此URL的每个进一步请求,浏览器都会在HTTP GET请求中包含该用户名和密码。

所以基本的答案是,服务器不记得你已经登录。浏览器记得这一点。由于您正在编写浏览器,因此您的应用程序需要记住该URL的用户名/密码组合。无论您在收到401响应后现在做什么,都只需要为该URL做点什么。你甚至不需要等待401响应。

+0

我是这么想的。任何想法如何将授权标题添加到Uri?或者我可以如何使用请求头调用任何浏览器? – 2014-12-02 20:51:11

+0

在你的问题中,你声明你可以发送HTTP Get和Authorization头。这就是你需要做的。您只需要为每个请求执行此操作。 – 2014-12-02 21:03:32

+0

问题是,即使我通过HTTPClient执行HTTPGet,它也不会被浏览器注意到。而在Android中,您可以通过Intent打开浏览器。唯一的参数是Uri。所以我不知道在哪里把我的请求标题放在那里...但无论如何,已经感谢您的回应。 – 2014-12-02 21:13:58