3

我想从网页中获取数据,其中包含一些 json 数据。问题是,json 数据只有在用户登录网站时才会返回。如果不是,则返回登录页面。

URL url = new URL(API_URL);
URLConnection conn = url.openConnection();

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream)));
StringBuilder builder = new StringBuilder();
String line = "";

while ((line = br.readLine()) != null) {
    builder.append(line + System.getProperty("line.separator"));
}
String result = builder.toString();

所以,result我期待有 json 数据。但我在那里有一个登录页面。我尝试从浏览器登录,但没有帮助。

如何使用浏览器中的 cookie 来访问此登录页面?

4

2 回答 2

1

如果您使用的是 Java SE,我建议您使用 Apache HttpClient 库。这支持各种身份验证,包括使用会话 cookie 的基于表单的登录。我不知道这是否是对 Android 的好建议。

编辑

我没有注意到真正的问题是访问浏览器 cookie。

1:您是否尝试过使用android.wewbkit.CookieManager.getInstance()createInstance(Context)获取浏览器的 cookiemanager 实例?

2:是否可以将您的应用程序(或其中的一部分)编写为 webkit 插件,以便它可以通过这种方式访问​​ cookie?(我对 webkit / android 知之甚少,不知道这是否有意义。)

3:如果你不能这样做,你可以想象将你的应用程序编写为一个网络代理,并让它在它们通过时“窃取”cookies。(但这听起来是个坏主意。存在安全和隐私问题,以及可能干扰正常浏览器功能的问题。)

4:最后,还有一个备用选项,即编写您的应用程序以进行自己的登录并管理自己的会话 cookie。问题是您无法避免使您的应用程序特定于远程网站的登录方式。

跟进

@Daniel Trebbien 的回答认为选项 1:出于安全原因不是首发。这是有道理的。(如果一个应用程序可以获取另一个应用程序的 cookie,则浏览器安全性将不存在。)

虽然 Android 确实提供了一个插件 API,但它已被弃用,我看到一位 Android 工程师的帖子说不鼓励第三方代码使用它。这几乎使选项2:死胡同。

选项 3:将要求用户配置他的手机浏览器以使用您的应用程序作为代理......他们可能不应该这样做。

需要考虑的其他几个选项是:

5:在 Javascript 中将应用程序的功能实现为 NPAPI 浏览器插件。

6:使用 WebView 为您的应用程序提供其自己的(缩减的)Web 浏览器。您的应用程序自然可以完全访问它自己的 CookieManager 实例。

于 2010-11-26T15:05:25.260 回答
1

如果可以从浏览器应用程序中获取任意 cookie 或通过浏览器下载数据,那么我会非常担心,因为这些将是严重的安全漏洞。想象一下,有人登录 BankOfAmerica.com,应用程序能够检查 bankofamerica.com 会话 cookie 或通过浏览器下载 bankofamerica.com 页面。在任何一种情况下,应用程序都能够以登录个人的身份执行网上银行操作!

简单的答案是您的应用需要询问用户的登录信息。然后,您使用HttpClient自己的 cookie 存储来登录用户。

于 2010-11-26T18:15:28.863 回答