gpt4 book ai didi

android - Cordova:在 Android App 中调用 loadUrl() 时如何设置 HTTP ACCEPT header ?

转载 作者:行者123 更新时间:2023-11-29 02:01:51 24 4
gpt4 key购买 nike

我在 Activity 的 onCreate() 方法中使用 loadUrl() 方法将内容从外部网络服务器加载到 WebView 中(我正在构建一个 adroid 应用程序)。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("http://server-name/path/to/my/server/app/");
}

在服务器上,我检查 ACCEPT HTTP header 以决定我将向客户端传送哪种数据格式。

现在的问题是:loadUrl() 方法似乎总是发送 ACCEPT header 值“application/xml, ...”,这将导致我的服务器传送的数据不是布局良好的 html(这就是我想要的)对于 web View ),而是作为纯 xml(这对于例如某些 Web 服务客户端很有用)。

所以我想做的是将 ACCEPT HTTP header 设置为“text/html”,但 loadUrl() 方法不允许我这样做。

我检查了 cordova/android 的源代码,发现 loadUrl() 方法(在 CordovaWebView.java 中)最终调用了(android sdk)WebView 的 loadUrl() 方法,该方法被重载以获取一些额外的 http header .但是我无法通过正常的 cordova 使用访问该 loadUrl 方法。

所以我编辑了 CordovaWebView 的 loadUrlNow() 方法,它调用 WebView 的 loadUrl() 方法并硬编码了一个额外的 header :

void loadUrlNow(String url) {
...
Map<String, String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("ACCEPT", "text/html");
super.loadUrl(url, extraHeaders);
}

然后编译它,用我自己的替换原来的 cordova.jar 并重建我的 android 应用程序。但是,如果我现在启动应用程序并检查服务器端的 ACCEPT HTTP header ,则 ACCEPT header 不会更改。它的值与硬编码额外 header 之前的值完全相同;看来我无法更改该 header 。

那么,有什么方法可以在调用loadUrl()方法时设置ACCEPT http头吗?

最佳答案

好吧,我自己找到了答案。我发现,我无法覆盖 WebView 发送的 header ;如果我这样做,它们将被 WebView 的默认值覆盖,正如 ADT 文档在此处所说(参见方法 loadUrl,参数 additionalHttpHeaders):

http://developer.android.com/reference/android/webkit/WebView.html#loadUrl(java.lang.String , java.util.Map)

Note that if this map contains any of the headers that are set by default by this WebView, such as those controlling caching, accept types or the User-Agent, their values may be overriden by this WebView's defaults.

我不确定两周前的文档是否那么清楚(时间戳是 2012 年 9 月 13 日)。作为一种解决方法,我正在尝试将自定义 HTTP header (如 *MYAPP_ACCEPT*)设置为“text/html”,我可以在服务器端对其进行评估。不过,要添加这个额外的 HTTP header ,我需要使用我自己编译的 cordova 库。

关于android - Cordova:在 Android App 中调用 loadUrl() 时如何设置 HTTP ACCEPT header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12243863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com