通过Intent将cookie传递给浏览器

12

我在安卓中保存了一个cookie。现在我想将它传递给我的浏览器意图。请看我的当前代码:

Intent browser = new Intent("android.intent.action.VIEW",
                            Uri.parse("http://mypage.php/memberpagethatrequireacookie.php"));
//putExtra cannot take these arguments -> browser.putExtra("org.apache.http.cookie.Cookie", cookie);
startActivity(browser);

我希望它能够暂时存储在我的浏览器中,以便我的会员页面成功加载。 我的cookie已经从HTTP请求中成功创建,并赋值给List<Cookie> cookie;。告诉我是否需要提供更多的代码。

有什么想法吗?先感谢了!

3个回答

12

浏览器没有记录文档化的Intent extras,更不用说允许您注入cookie的内容。当然,用户可能正在使用不同的浏览器。

您可以在应用程序中使用WebView,并且可以使用CookieManager将您的cookie注入到WebView的环境中。


1
那么用通常的浏览器做不到吗?那么 WebView 选项就是正确的选择。 - Curtain
3
@朱利安·阿桑奇:我不知道使用“普通浏览器”是否可以实现这一点。而且有些设备会替换掉那个浏览器。还有一些用户会替换掉那个浏览器。所有这些人都同意通过Intent额外信息来接受cookie的未记录协议的可能性非常低。 - CommonsWare
好的,谢谢。又出现了另一个问题,但我会在另一个问题中提出。这是关于Cookie注入本身不起作用的问题。 - Curtain

5

这里是使用android.proveder.Browser的答案:

我有一个Map对象,存储了我想要传递的头部信息。然后执行以下操作:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Bundle bundle = new Bundle();
if(mExtraHeader!=null){
 for(String key: mExtraHeader.keySet()){
  bundle.putString(key, mExtraHeader.get(key));
 }
}
i.putExtra(Browser.EXTRA_HEADERS, bundle);
startActivity(i);

就像其他人提到的那样,这只适用于默认浏览器,其他浏览器可能没有Browser.EXTRA_HEADERS。资源:http://gitorious.org/rowboat/packages-apps-browser/blobs/a563d09392905140893d7a017dd63721577e1953/src/com/android/browser/BrowserActivity.java

0
以上代码可以成功设置头信息(感谢您的帮助),但我无法通过这种方式设置cookie。我怀疑的是,如果Web浏览器已经为目标URL存储了cookie,则会覆盖使用EXTRA_HEADERS创建的cookie。

"Set-Cookie" 是一个HTTP响应头。 我们在此谈论的是HTTP请求中的 "Cookie" 头。 - claudius
"Cookie" 头部然后... http://zh.wikipedia.org/wiki/HTTP头字段列表 - Andrew Mackenzie
这确实证实了我关于“请求”和“响应”HTTP头的说法。可以在请求中发送“Cookie” HTTP头。可以在响应中接收“Set-Cookie”头。由于这个问题涉及通过手动设置cookie发送请求,我们正在谈论“Cookie”头,而不是“Set-Cookie”头,在请求中使用后者是没有意义的。 - claudius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接