以下代码
var webView: WKWebView!
override func loadView() {
super.loadView()
self.webView = WKWebView(frame: .zero)
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
var request = URLRequest(url: URL(string: "https://hosts")!)
request.httpMethod = "POST"
let bodyData = "data1=postData"
request.httpBody = bodyData.data(using: .utf8)!
self.webView.load(request)
}
我能够在iOS 11.2上加载网站上的POST参数,但无法在iOS 11.3 上获得
为什么没有在iOS 11.3上获得它?规格是否更改?
我想让任何人告诉我解决办法。请给我答案。
WKWebView不会像UIWebView那样自动将POST请求的Content-Type标头设置为application/x-www-form-urlencoded。
var webView: WKWebView!
override func loadView() {
super.loadView()
self.webView = WKWebView(frame: .zero)
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
var request = URLRequest(url: URL(string: "https://hosts")!)
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let bodyData = "data1=postData"
request.httpBody = bodyData.data(using: .utf8)!
self.webView.load(request)
}
在11+上没有遇到这个错误,但在10.3.3上出现了,在12+上还可以。我已经恢复到使用主体执行请求,手动使用共享会话,而不是将加载的数据插入WKWebView。
var firstRequest: URLRequest = URLRequest(url: requestUrl)
firstRequest.httpMethod = "POST"
firstRequest.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
firstRequest.httpBody = "data1=(requestData1)".data(using: .utf8)
URLSession.shared.dataTask(with: firstRequest) { [weak self] (data, response, error) in
// check error, response and data to show useful error message
if let data = data {
self?.webView.load(body, mimeType: "text/html", characterEncodingName: "UTF-8", baseURL: baseUrl)
}
}.resume()
如果切换到WKWebView,可以使用以下方法。基本上,您需要使用WKURLSchemeHandler协议:
1.设置网络视图
let config = WKWebViewConfiguration()
config.setURLSchemeHandler(self, forURLScheme: "my-custom-scheme")
let wkWebView = WKWebView(frame: .zero, configuration: config)
2.实现WKURLSchemeHandler协议
func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
if let url = urlSchemeTask.request.url, url.scheme == "my-custom-scheme" {
self.handleTermURLCallback(urlSchemeTask.request)
}
}
通过使用它,您会发现回调中的请求httpBody不是null,并且您可以继续使用UIWebView的相同方式。
我们花了很多努力才找到这个,但它对我们有效,我们不需要做太多改变。希望对你们有所帮助。