解决WKWebView http POST不再在iOS 11.3中发送参数

问题描述 投票:2回答:4

我的申请有两种观点:

  • 等待用户凭据的登录视图
  • 包含webview的主视图

当用户输入其凭据时,将向服务器发送本机异步POST方法。如果凭据有效,则将用户重定向到webview视图并使用load(request)方法加载它。

注意:request也是使用所述凭据的POST方法。

这种两步验证的原因是避免使用403错误登录/密码对打开webview;如果在第一步中验证失败,则用户将保持登录视图。

Here is a flow chart explaining how the authentication works

10.0和11.2之间的iOS版本运行应用程序没有任何问题。使用iOS 11.3的设备和模拟器打开webview,出现403错误。

到目前为止,我可以断言两件事(并且已经过我们的后端测试):

  • 使用异步POST方法验证成功,这意味着凭据是正确的,并且应用程序和服务器之间的通信按预期工作
  • 加载webview时,服务器不会收到任何用于验证的参数,这解释了403登录/密码错误。

目前这个问题导致我的应用程序无法使用,因此非常需要快速修复。 GET请求已经过测试,其参数的发送没有任何问题。

任何建议都是最受欢迎的。

TL; DR - 由于iOS11.3 POST请求在WKWebViews中无法正常工作,如何使用GET请求进行或多或少的安全认证?

PS:无法添加iOS 11.3标签,如果有人可以添加它会非常感激。

post http-post ios11 wkwebview ios11.3
4个回答
0
投票

我有同样的问题:(,不知道为什么POST参数不通过WKWebview加载URL请求时发送。你可以用URL会话加载网站内容(html资源)并填写到WKWebview。但它不会保留历史记录,或者如果您的页面使用cookie,则返回navigationRequest。


0
投票

我使用UIWebView而不是WKWebView,它工作正常!


0
投票

遗憾的是,你不能用WKWebView做到这一点。

它肯定不适用于webView:decisionPolicyForNavigationAction:decisionHandler:因为navigationAction.request是只读的,而且是一个不可更改的NSURLRequest实例。

如果我理解正确,WKWebView会在单独的内容和网络流程中运行沙箱,至少在iOS上,无法拦截或更改其网络请求。

如果您退回到UIWebView,则可以执行此操作。


0
投票

我使用WKWebView对iOS 12.1.4进行了测试,并按预期工作。您需要确保请求具有正确的标头。在我的情况下,问题是由缺少的内容类型给出的,其必须是“application / x-www-form-urlencoded”。因此,你需要确保身体部分符合rfc-1738,并且空格字符表示为'+',如here所述。

关于WKWebView提到的委托webView:decisionPolicyFor:身体部分没有显示,但它实际上是发送的。我可能认为出于内存/安全原因显示为空,或者可能只是一个错误,到目前为止并不太关心

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.