带有POST方法的Swift WebKit requestBody

问题描述

    func webView(url: URL,delegate: Any = WebView(),body: [String : String]? = nil) -> UIView {
    let view = UIView()
    let webViewFrame = UIScrollView()
    let webView = WebView()
    
    view.addSubview(webViewFrame)
    webViewFrame.isDirectionalLockEnabled = true
    
    webViewFrame.backgroundColor = .white
    webViewFrame.layer.cornerRadius = 10
    webViewFrame.anchor(top: view.topAnchor,left: view.leftAnchor,bottom: view.bottomAnchor,right: view.rightAnchor)
    
    view.addSubview(webView)
    webView.navigationDelegate = delegate as? WKNavigationDelegate
    webView.scrollView.delegate = delegate as? uiscrollviewdelegate
    webView.load(URLRequest(url: URL(string: "https://www.google.com")!))
    webView.allowsBackForwardNavigationGestures = true
    webView.anchor(top: webViewFrame.topAnchor,left: webViewFrame.leftAnchor,bottom: webViewFrame.bottomAnchor,right: webViewFrame.rightAnchor,paddingTop: 16,paddingBottom: 16)
    
     let url = URL(string: "https://pay.weatly.me/test_body2")
     guard let requestUrl = url else { fatalError() }
     var request = URLRequest(url: requestUrl)
     request.httpMethod = "POST"
    
     let testBody = ["orderId" : "kyo"]
     let postString = getPostString(params: testBody)
     request.httpBody = postString.data(using: String.Encoding.utf8);

     let task = URLSession.shared.dataTask(with: request) { (data,response,error) in

        if let error = error {
            print("Error took place \(error)")
            return
        }
        if let response = response as? HTTPURLResponse {
            dispatchQueue.main.async { // Correct
                webView.load(URLRequest(url: response.url!))
            }
        }
        if let data = data,let dataString = String(data: data,encoding: .utf8) {
            
            print("Response data string:\n \(dataString)")
        }
     }
     task.resume()

    return view
}

这是UIView的全部功能。我的目标是实现。

  1. 一个URL,我必须对requestBody使用POST方法在这里,[“ orderId”:“ kyo”]
  2. 我请求正文后,如果我打开https://pay.weatly.me/test_body2,则应该在webView上看到“ kyo”。

但是,我只看到带有405代码错误webView。如果您只是转到此链接,则可以看到https://pay.weatly.me/test_body2。 主要问题是...

    if let data = data,encoding: .utf8) {
        print("Response data string:\n \(dataString)")
    }

此行显示

enter image description here

我想用屏幕上的数据打开webView ...

这些是我所知道的

  1. 我成功地使用POST方法和正文请求了网址
  2. 服务器工作正常。它在网页上显示了“ kyo”
  3. 我可以使用dataString = String(data:data,encoding:.utf8)检查字符串数据
  4. 尽管如此,网页还是正确的,如果我使用webView.load()加载网址,则会看到405错误页面

请帮助我...:(

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)