如何为 WKWebView 发出的请求设置自定义 HTTP 标头

2023-12-30

我构建了一个包含 WKWebView 的应用程序,并且 Web 视图加载的网站支持多种语言。我怎样才能改变Accept-LanguageWKWebView 中的标头,或其他 HTTP 标头?


我已经让它以某种方式工作,但只有获取请求才会有自定义标头。正如 jbelkins 在链接中回答的那样,来自 Gabriel Cartiers 对您的问题的评论,您将必须操纵请求并重新加载它。

我已经让它适用于像这样的 GET 请求:

(它在 xamarin 0> c# 中,但我想你会明白的)

我创建了一个私有字段

private bool _headerIsSet

每次在 deligate 方法中发出请求时我都会检查:

[Foundation.Export("webView:decidePolicyForNavigationAction:decisionHandler:")]
    public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
    {
        var request = navigationAction.Request;
        // check if the header is set and if not, create a muteable copy of the original request
        if (!_headerIsSet && request is NSMuteableUrlRequest muteableRequest);              
        {
            // define your custom header name and value
            var keys = new object[] {headerKeyString};
            var values = new object[] {headerValueString};
            var headerDict = NSDictionary.FromObjectsAndKeys(values, keys);
            // set the headers of the new request to the created dict
            muteableRequest.Headers = headerDict;
            _headerIsSet = true;
            // attempt to load the newly created request
            webView.LoadRequest(muteableRequest);
            // abort the old one
            decisionHandler(WKNavigationActionPolicy.Cancel);
            // exit this whole method
            return;
        }
        else
        {
            _headerIsSet = false;                
            decisionHandler(WKNavigationActionPolicy.Allow);
        }
    }

正如我所说,这只适用于GET-要求。不知何故,POST-要求不包含身体数据原始请求的主体数据(request.Body 和 request.BodyStream 为 null),因此 muteableRequest(原始请求的可变副本)不会包含原始请求的主体数据。

我希望这会对您或其他遇到相同问题的人有所帮助。

Edit:根据您的需要,将“Accept-Language”设置为键

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 WKWebView 发出的请求设置自定义 HTTP 标头 的相关文章

  • 在 Alamofire 中快速发送 GET 请求中的 json 对象

    我正在尝试执行一个绑定了 json 对象的 GET 请求 这就是我生成 JSON 对象的方式 let jsonObject String AnyObject ean code type match value 16743799 然后我执行了
  • Mac 上使用 Excel VBA 进行正则表达式

    我需要将 regEx 与 Excel VBA 一起使用 我使用的是 Mac OS 10 10 和 Office 2011 因此没有可以使用的 DLL 文件 这里有什么可做的 我读到我必须绑定一个苹果脚本 这是如何完成的以及该脚本需要什么内容
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 可达性更改通知应仅调用一次

    我在我的 swift 项目中使用了 Reachability 我在 AppDelegate 中有以下代码 NSNotificationCenter defaultCenter addObserver self selector reacha
  • Brew Postgresql 启动但进程未运行

    我在 Mac 上通过 Brew 安装了 Postgres 然后 我尝试启动它 gt brew services restart postgres Stopping postgresql might take a while gt Succe
  • scrollToRowAtIndexPath:atScrollPosition:动画滚动太慢

    基于分页 UIScrollView 的页面更改 我正在调用scrollToRowAtIndexPath atScrollPosition animated到所显示的该页面的表详细信息 void scrollViewDidScroll UIS
  • 即席分发失败

    我在一家大公司工作 正在开发一个适用于 iOS 5 的 iOS 应用程序 分发应用程序的唯一方式是通过临时部署 我拥有自己的服务器已经有一段时间了 由 o2switch 法国托管商 托管 当我开始开发时 我们使用它来部署应用程序以进行 Be
  • 如何在 mac yosemite 上撤消“brew link --force openssl”

    我在尝试使用 php54 升级酿造公式时遇到了一些问题 我在github上找到了一些解决这个问题的建议openssl php 酿造错误 https github com Homebrew homebrew php issues 1181 其
  • 取消交互式 UINavigationController 弹出手势不会调用 UINavigationControllerDelegate 方法

    如果拖动 a 的边缘UIViewController开始交互式流行过渡UINavigationController the UIViewController在电流下方有viewWillAppear 调用 然后是UINavigationCon
  • 未安装的应用程序的URL方案

    简单的问题 我正在开发一个将注册自己的 URL 方案的应用程序 我计划通过人们最喜欢的 QRCode 阅读器使用 QRCode 启动该应用程序 我的问题 如果我的应用程序尚未安装在他们的 iPhone iPad 上 会发生什么 他们会被引导
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • 使用 iOS 设备作为 TCP 客户端 - 无 Bonjour

    我想使用 iOS 设备作为 TCP 客户端 但我找不到可理解的 API 指南 示例来说明如何做到这一点 我试过SimpleNetworkStreams and PictureSharing 但他们都使用 Bonjour 我可以轻松建立 UD
  • 使用导航控制器在 Storyboard 中呈现视图控制器 - Swift

    我目前在下面的新故事板中显示了一个 viewController var storyboard UIStoryboard UIStoryboard name AccountStoryboard bundle nil var vc Welco
  • iPhone / iPad IOS 应用程序仪器内存计数与 task_info 内存计数

    我一直在使用 Instruments Leak Tester 它给出了大约 1 3 meg 的应用程序总分配数字 但是 当使用 task info 时 它会报告更大的内存量 例如 10 20 meg 我想我只是想确认task info正在返
  • SDWebImage 显示缓存中图像的占位符

    在 iOS 5 1 项目 iPad 中使用 SDWebImage 3 我们展示相当大的图像 700x500 并且我们有很多图像 1000 我们预取图像并缓存到磁盘 然后允许用户浏览它们 效果很好 除了当您浏览图像时 您总是会看到占位符显示一
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • 将 Facebook 图片 URL 上传到 Firebase 存储

    我正在尝试将用户的 Facebook 个人资料图片上传到 Firebase 存储 let dictionary result as NSDictionary let data dictionary objectForKey data let
  • Pip 突然使用了错误版本的 Python

    在 os x 上使用 pip 时遇到一个奇怪的问题 据我所知 快速查看我的 bash history 似乎可以确认 我最近没有对我的配置进行任何更改 唉 pip 命令似乎突然使用了与以前不同的 python 版本 到目前为止 我使用命令 p
  • NSURLConnection 是否自动保留从服务器发送的 cookie?

    我从 ios 登录到我的龙卷风后端并发回 secure cookie 我注意到只要验证我设置的 secure cookie 我还可以请求其他信息 NSURLConnection 会保留 cookie 多久 或者关闭应用程序后 cookie

随机推荐

  • REST批量删除多个项目

    我需要按批处理中的 id 删除多个项目 但是 HTTP DELETE 不支持正文有效负载 解决方案 1 DELETE path abc itemId 1 itemId 2 itemId 3 on the server side it wil
  • 气流相对导入外部 /dag 目录

    我无法将通用代码移至气流使用的 dag 目录之外 我看过气流源 https github com apache incubator airflow blob 4f20f607764bb3477419321b5dfd0c53ba1db3c0
  • 下载并保存 PDF 以供查看

    我正在尝试从我的应用程序下载 PDF 文档并将其显示在 IBooks 中 或者至少在下载完成后使其可供阅读 我按照 Xamarin 的下载示例进行操作 它允许我下载 PDF 并将其保存在本地 它也以错误的编码保存 这是我到目前为止所尝试过的
  • MongoDB NodeJS 返回子文档

    我正在尝试返回与查询字段匹配的子文档 我只想返回与用户匹配的 PIN 该 PIN 保存在帐户集合中 这就是我到目前为止所得到的 router post SelectUser async req res gt try const acc aw
  • 我的网络应用程序应该支持哪个版本的 Internet Explorer (IE) [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 由于 MS 将很快停止支持 IE 8 之前的任何内容 我不确定是否应该使我的网络应用程序与那些旧浏览器兼容 我知道仍然有人在使用它们 但我不知道是否有
  • Android 音频播放的广播意图?

    我正在尝试构建一个 Android 应用程序 它使用广播接收器来检测音乐播放何时开始 然后提供手势控制来触发发送跳过曲目意图 首先 我只想将接收器设置为在音频播放开始时触发通知 以便我可以检查这个概念是否有效 我已经在清单文件中声明了一个服
  • 如何在Python中查找n天前的日期?

    我想写一个脚本 给Python几天的时间 我们称之为d 它给了我我们的日期d几天前 我正在努力处理模块日期时间 import datetime tod datetime datetime now d timedelta days 50 a
  • Java Swing Shift+F10 辅助功能

    Per accessibility requirements Shift F10 is supposed to open right click context menus In Swing one approach is to just
  • 发送电子邮件时出现 SmtpException

    我正在尝试通过我的 C 代码发送电子邮件 但我得到SmtpException 连接尝试失败 因为连接方在一段时间后没有正确响应 或者建立的连接失败 因为连接的主机未能响应 173 194 67 109 587 这是我发送电子邮件的方式 st
  • Ansible 清单可以包含另一个清单吗?

    我们有一组在应用程序的不同实例之间共享的服务器 并希望它们的列表是一个单独的文件 以及其他特定于实例的清单包括 it 我知道 这可以通过dynamic库存 但这些是代码 我们希望保留我们的服务器列表data 可以这么说 对于 INI 库存
  • 未找到 qml XmlListModel 插件

    在我的项目中 我尝试使用 qml 内置的 Xml 列表模块 但是当我编译到手机时 出现此错误 W Qt 20100 assets qml FlickrDemo main qml 4 null assets qml FlickrDemo ma
  • @supports 的功能检测?

    如何检测浏览器是否支持 CSS supports 功能 由于 Internet Explorer 和 Safari 不支持它 因此我的 Web 应用程序不知道在这些浏览器中应用哪些样式 使用纯 CSS 您可以依靠级联来确定浏览器是否理解 s
  • 使用 Gunicorn 部署时如何在 Flask 方法之间共享内存资源

    我使用 Flask 实现了一个简单的微服务 其中处理请求的方法根据请求数据和加载到内存中的相当大的数据结构计算响应 现在 当我使用gunicorn和大量工作线程部署此应用程序时 我只想在所有工作人员的请求处理程序之间共享数据结构 由于数据只
  • LWJGL 教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在不同情况下删除Excel中的重复项(VBA)?

    我需要将相应的值汇总到右侧的列中 但也需要删除重复项 这是交易 例如 如果我有从 A 到 F 的列 如果 A 到 E 列与另一行相同 则宏将删除该行并保存旧行 如果 A 至 C 列与另一现有行相同 宏将删除另一行并将 D 和 E 列中的相应
  • 用于交叉编译 BBB 应用程序的工具链

    我的本机是基于ubuntu的14 04 LTS x86 64系统 我想为Beaglebone black交叉编译应用程序和QT程序 这是一个运行在Debian 2015发行版上的基于armv7的系统 我应该在本机系统上安装哪个工具链才能完成
  • NAudio fft 结果给出所有频率的强度 C#

    我有 NAudio 的 wasapi 环回记录和数据 FFT 的工作实现 我得到的大部分数据都是正常的 但每隔一段时间 10 秒到几分钟的时间间隔 它就会显示几乎所有频率上的幅度 基本上 图片从右到左滚动 时间和频率从底部的最低频率开始按对
  • .Net 静态方法及其对并发的影响?

    我目前正在构建一个将由网络服务使用的 API 我想知道如果我使用大量的 API 来构建我的 API 会遇到什么性能问题静态方法 最初的想法是构建充当服务的专家对象 在单用户环境中 这种方法非常棒 但我很快就需要将其移植到多 并发用户环境中
  • Beyond Compare 2 忽略大小写

    如何让 Beyond Compare 2 忽略字母大小写的差异 例如 Foo Bar 和 fOo BAR 将被视为相同 在我拥有的BeyondCompare版本 版本3 3 Pro 中 您可以选择 文本重要 字符大小写除外 要找到此设置 请
  • 如何为 WKWebView 发出的请求设置自定义 HTTP 标头

    我构建了一个包含 WKWebView 的应用程序 并且 Web 视图加载的网站支持多种语言 我怎样才能改变Accept LanguageWKWebView 中的标头 或其他 HTTP 标头 我已经让它以某种方式工作 但只有获取请求才会有自定