在使用浏览器意图时传递标头

13
我想在打开网页时传递一些标头。目前,我正在做以下操作: browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse(data.link)); startActivity(browserIntent); 现在我卡住了,因为我不知道如何使用browserIntent传递标头。我尝试使用browserIntent.putExtra(),但它不起作用。
有人能帮忙吗?
2个回答

21
这是我在过去两天中最大的问题,我找到它了!!!
我有一个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


我的最新测试在Android 6.0.1上使用Chrome 50和EXTRA_HEADERS工作正常。 - keineantwort
它在我使用Chrome 57时可以工作。但是我将我的Chrome更新到61,现在它不工作了! :| - Mansour
@Mansour,你搞清楚如何解决这个问题了吗? - Dmila Ram
@DmilaRam 不,我没有。我在一些论坛上发现这是一个bug。由于chrome只接受一个带有此方法的头文件,所以我通过将所有头文件连接到一个头文件中并将结果作为唯一的头文件发送来解决了我的问题,当然这些更改也应用于服务器端,我认为这不是一个标准的解决方案。在你只开发客户端的情况下,我不知道你应该怎么做! - Mansour

2

正如Satoshi所猜测的那样,这在Chrome中不起作用。如果您需要传递标头,则需要创建自己的WebView,并使用标头映射加载URL。假设mWebView是对您的WebView的引用。

Map<String, String> headers = new HashMap<>();
headers.put("referer", "http://some-referer");
mWebView.loadUrl(mUrl, headers);

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