【问题标题】:How i can Load POST URLRequest with parameter in WKWebView?如何在 WKWebView 中加载带有参数的 POST URLRequest?
【发布时间】:2020-03-05 05:55:52
【问题描述】:

对不起,我的英语很差 我尝试了多种类型的解决方案,但不适用于 Xcode 11.2.1swift 5

我试试这个

var urlRequest = URLRequest(url: URL(string: "https://xxxxxx/login")!)  
      urlRequest.httpMethod = "POST"  
     let params = [  
                            "username":   SessionManager.shared.username!,  
                            "password":  SessionManager.shared.password!,  
                            "vhost": "standard"  
      ]  
      let postString = self.getPostString(params: params)  
        urlRequest.httpBody = postString.data(using: .utf8)  
       webView.load(urlRequest)  


...  
//helper method to build url form request  
func getPostString(params:[String:String]) -> String  
    {  
        var data = [String]()  
        for(key, value) in params  
        {  
            data.append(key + "=\(value)")  

        }  
        return data.map { String($0) }.joined(separator: "&")  
    } 

还有这个

Post Request with Parameter

并尝试在我的代码中添加以下行

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

但不工作 我触发了请求,因为 WKWebView 屏幕未打开但未加载请求。 如果我没有设置 navigationDelegate 并正常打开URL 那么它完全可以工作 如果我设置 navigationDelegate 则空白页进入所有 Request Like Normal URL fire 或 post 参数 URL fire, All arecoming to Blank Page in 我不明白WKWebView 有什么问题 请帮我。 提前致谢

【问题讨论】:

    标签: ios swift5 ios12 xcode11.2


    【解决方案1】:

    请求正文使用与查询字符串相同的格式:

    parameter=value&also=another
    

    因此,您请求的内容类型为 application/x-www-form-urlencoded 类型:

    let postString = self.getPostString(params: params)  
    
    urlRequest.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    urlRequest.httpMethod = "POST"
    urlRequest.httpBody = postString.data(using: .utf8)  
    
    webView.load(urlRequest)  
    

    【讨论】:

      【解决方案2】:

      试试这个,我们将使用 URLSession 发起一个 POST 请求,将服务器返回的数据转换为字符串,而不是加载 url,我们将使用 loadHTMLString 这将:

      设置网页内容和基本 URL。

      内容是我们转换后的字符串::-

      var request = URLRequest(url: URL(string: "http://www.yourWebsite")!)
          request.httpMethod = "POST"
          let params = "Your Parameters"
          request.httpBody = params.data(using: .utf8)
      
          let task = URLSession.shared.dataTask(with: request) { (data : Data?, response : URLResponse?, error : Error?) in
                  if data != nil {
                      if let returnString = String(data: data!, encoding: .utf8) {
                          self.webView.loadHTMLString(returnString, baseURL: URL(string: "http://www.yourWebsite.com")!)
                      }
                  }
          }
          task.resume()
      

      【讨论】:

      • 我试过了,但在@Sidharth Khanna 出现的空白页上没有工作
      • 您有任何错误吗?您能否分享该端点上服务器的预期响应。
      • 这个进入控制台“收到 XPC 错误连接对消息类型 3 kCFNetworkAgentXPCMessageTypePACQuery 无效”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多