在Swift中,可以通过WKWebView的navigationDelegate来获取POST请求的正文。首先,需要设置WKWebView的navigationDelegate为自定义的类,该类需要遵循WKNavigationDelegate协议。然后,在该类中实现webView(_:decidePolicyFor:decisionHandler:)方法,该方法会在每次请求发起前被调用。
在webView(_:decidePolicyFor:decisionHandler:)方法中,可以通过判断navigationAction的request属性的httpMethod是否为"POST"来确定是否为POST请求。如果是POST请求,可以通过navigationAction的request属性的httpBody来获取POST请求的正文。
以下是一个示例代码:
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
view = webView
let url = URL(string: "https://example.com")
let request = URLRequest(url: url!)
webView.load(request)
}
// WKNavigationDelegate method
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.request.httpMethod == "POST" {
if let httpBody = navigationAction.request.httpBody {
// 获取POST请求的正文
let postBody = String(data: httpBody, encoding: .utf8)
print("POST请求正文:\(postBody ?? "")")
}
}
decisionHandler(.allow)
}
}
在上述示例代码中,我们创建了一个WKWebView,并将其navigationDelegate设置为ViewController类。在webView(_:decidePolicyFor:decisionHandler:)方法中,我们判断了请求的httpMethod是否为"POST",如果是,则通过request的httpBody属性获取POST请求的正文,并进行处理。
请注意,以上示例代码仅演示了如何从WKWebView获取POST请求的正文,实际应用中可能需要根据具体需求进行进一步处理和解析。
领取专属 10元无门槛券
手把手带您无忧上云