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

解决WKWebView http POST不再在iOS 11.3中发送参数的问题,post,http-post,ios11,wkwebview,ios11.3,Post,Http Post,Ios11,Wkwebview,Ios11.3,我的应用程序有两个视图: 等待用户凭据的登录视图 包含webview的主视图 当用户输入其凭证时,会向服务器发送一个本机异步POST方法。如果凭据有效,用户将被重定向到webview视图,并使用加载(请求)方法加载它 注意:请求也是使用上述凭证的POST方法 这两步身份验证的原因是避免打开webview时出现403错误登录/密码对;如果第一步身份验证失败,用户将停留在登录视图上 10.0和11.2之间的iOS版本运行应用程序时不会出现任何问题。使用iOS 11.3的设备和模拟器打开webv

我的应用程序有两个视图:

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

  • 包含webview的主视图

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

注意:请求也是使用上述凭证的POST方法

这两步身份验证的原因是避免打开webview时出现403错误登录/密码对;如果第一步身份验证失败,用户将停留在登录视图上

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

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

  • 使用异步POST方法验证成功,这意味着凭据正确,应用程序和服务器之间的通信正常工作

  • 加载webview时,服务器不会收到任何用于身份验证的参数,这解释了403登录/密码错误

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

欢迎提出任何建议

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


PS:无法将iOS 11.3标记添加到它,如果有人能够添加它,我们将不胜感激。

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

我使用了UIWebView而不是WKWebview,它工作了!

遗憾的是,您无法使用WKWebview进行此操作

它在webView:decidePolicyForNavigationAction:decisionHandler:中肯定不起作用,因为navigationAction.request是只读的,是一个不可变的NSURLRequest实例,您无法更改

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


如果返回UIWebView,则可以执行此操作。

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

关于WKWebView提到的代理webView:decidePolicyFor:没有显示主体部分,但它实际上已发送。出于内存/安全原因,我可能会假设显示为空,或者可能只是一个bug,到目前为止对此不太关心


希望能有所帮助

您找到任何解决方案或解决方法了吗?暂时,我更喜欢使用UIWebView而不是WKWebView作为解决方法。我可以确认这对iPadOS 13.5.1中的WKWebView有效。可以按如下所述发送内容类型标题: