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

时间:2018-04-16 09:35:41

标签: post http-post ios11 wkwebview ios11.3

我的申请有两种观点:

  • 等待用户凭据的登录视图

  • 包含webview的主视图

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

注意:请求也是使用上述凭据的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标签添加到其中,如果有人可以添加它,我将非常感激。

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我用UIWebView代替了WKWebView,它起作用了!

答案 2 :(得分:0)

不幸的是,您无法使用WKWebView做到这一点。

这肯定在webView:decidePolicyForNavigationAction:decisionHandler:中不起作用,因为navigationAction.request是只读的,并且是不可更改的NSURLRequest实例,您无法更改。

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

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

答案 3 :(得分:0)

我已经使用WKWebView针对iOS 12.1.4进行了测试,并且可以正常工作。您只需要确保请求具有正确的标头即可。在我的情况下,问题是由缺少的内容类型引起的,该内容类型必须为“ application / x-www-form-urlencoded ”。因此,您需要确保主体部分与rfc-1738兼容,并且如here所述,空格字符以'+'表示。

关于WKWebView提到的委托webView:decidePolicyFor:主体部分未显示,但实际上已发送。我可能会因为内存/安全性的原因而认为显示为空,或者可能只是一个错误,到目前为止并没有太多担心

希望有帮助