如何在Chrome自定义标签中添加自定义HTTP头?

17

对于标准的Android WebViews,您可以使用WebView.loadUrl(String url, Map<String, String> additionalHttpHeaders)。那么在Chrome自定义选项卡中如何添加额外的标头呢?

2个回答

25

我不确定除了url之外是否可以发送头信息或与http请求相关的任何内容。我希望将来的版本能够允许在建立CustomTabSession时通过Bundle发送头信息。

整个http调用在CustomTabActivity中进行管理

编辑:

最近更新的库支持添加Bundle并将其作为额外参数传递给CustomTabsIntent意图,并使用键Browser.EXTRA_HEADERS

Bundle headers = new Bundle();
headers.putString("header1", "value1");
headers.putString("header2", "value2");
customTabsIntent.intent.putExtra(Browser.EXTRA_HEADERS, headers);

4
我想在我的标题中指定一个“Cookie”。我尝试使用 headers.putString("Cookie", sessionID); 这个方法。但是当我检查请求时,似乎 Chrome 自定义标签会用自己的内容覆盖掉我的“Cookie”头部信息。您知道 Chrome 自定义标签是否会覆盖“Cookie”头部信息吗? - B W
@Nikola Despotoski 先生,我尝试使用您提供的上述代码传递标头,但它不起作用,请帮忙解决问题。 - Nikhil Singh
5
这似乎在最新版的Chrome中停止工作了。 - Scott Kennedy
根据这篇文章,您可以这样做,但需要设置数字资产链接:https://developers.google.com/web/android/custom-tabs/headers#set_up_a_custom_tabs_connection_to_validate_the_asset_link - WeezyKrush
“VIEW” 意图中额外数据的名称。这些数据是以 Bundle 格式的键值对形式存在的。它们将被发送到所提供 URL 的 HTTP 请求头中。由于 WebView 设置了标准的 HTTP 头,因此键不能是标准的 HTTP 头。URL 的模式必须是 http(s)。”有关“EXTRA_HEADERS”的文档,请参阅。 - mr5

1
上述解决方案不适用于新版本的ChromeTab。请按照此链接fix进行解决。您还可以学习Romain Piel的Medium文章,其中隐含了添加标头的用法和解决方法。

3
以上链接都没有提供任何新的解决方案,这些方案在之前已经被提及过了。 - Scott Kennedy
1
我认为这个问题没有解决方法,因为chrometabs存在一个错误,它隐含地说明在10月13日之后的版本中发生了chrometab的更改,该更改使用了错误的dispatch headers函数,该函数只允许添加一个header,并忽略我们添加多个headers时的headers,开始使用自己的传统headers来覆盖现有的headers。请参考此链接:https://bugs.chromium.org/p/chromium/issues/detail?id=772966 - DRY Believer
1
@DRYBeliever 虽然你的评论是正确的,但你的解决方案表明有一种变通方法,但两个链接都没有提供。请编辑你的答案以反映这一事实。 - tresf

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