iOS 至少在 10.3 之前缺少 URLRequest 中的 POST 数据

标签 ios swift post nsurlrequest urlrequest

带有 POST 数据的 Web View 不会 POST 正文,因此我缺少 Web View 所需的参数。在以后的版本中它可以正常工作,但在 9.1 中不起作用。

这是我设置 WebView 的方法:

lazy var webView:WKWebView = {
    let view = WKWebView()
    let url:URL = URL(string:<MyURL>)!
    let body:String = String(format: "param1=%@&param2=%@", arguments: [getParam1(), getParam2()])
    var request = URLRequest(url:url)
    request.httpMethod = "POST"
    request.httpBody = body.data(using: .utf8)
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
    view.navigationDelegate = self
    view.load(request)
    view.backgroundColor = .white
    view.scrollView.delegate = self;
    return view
}()

我在创建 body 时确认了我的参数存在。我到达该页面,但它显示一条有关两个参数丢失的错误消息。

知道如何在旧版本中使用它吗?

编辑:当我在 view.navigationDlegate... 行添加断点,然后打印请求的描述时,我注意到较新版本和较早版本的请求是相同的,除了一些预期的内容由于设备上的 session token 而改变的字节。该范围是我期望有所不同的确切范围。

最佳答案

啊,这似乎是 Web Kit 的一个错误,已在 iOS 11 中修复...相当大的错误,令人惊讶的是他们在早期版本中没有修补它。

我真的希望使用 WKWebView 而不是 UIWebView 以获得更好的 JavaScript 性能,但看起来我必须解决。

https://bugs.webkit.org/show_bug.cgi?id=167131

为了补充,我通过添加一个实例 var,var webView:UIView 解决了这个问题,并在 viewDidLoad 中,我这样做了:

if #available(iOS 11.0, *) {
    webView = _webView
}
else {
    webView = _webView2
}

将我的 WKWebView 惰性变量更改为 _webView,添加 _webView2 惰性变量作为 UIWebView,并实现了两者的委托(delegate)。这样,后来的 iOS 用户就可以获得 WKWebView 的性能优势,而不必将最低目标提高到 11.0 并失去 iOS 9-10 用户。

关于iOS 至少在 10.3 之前缺少 URLRequest 中的 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52006866/

相关文章:

ios - 如果要共享的数据很大并且应用程序可以有不同的应用程序 ID 前缀,那么两个 iOS 应用程序之间最好的数据共享机制是什么?

swift - child autoids 的 firebase 快照 key

javascript - 用替代内容(HTML + CSS + JS)替换整个网页

ios - iphone 如何推送浏览量?

objective-c - 在非空数组上获取 'index 0 beyond bounds for empty array' 错误

android - 您如何在后台通过iPhone应用程序流音频/将其杀死到网络上?

ios - SDWebImage 错误的单元格图像

javascript - GMap 轴承旋转平稳运动(改变轴承值时避免抖动效果)

android - 在 php 中检索 json 对象

php - 向安全操作发送 POST 请求