Как я могу загрузить POST URLRequest с параметром в WKWebView? - PullRequest
1 голос
/ 05 марта 2020

Извините, из-за этого мой Engli sh слаб. Я пробую много типов решений, но не работаю в Xcode 11.2.1 и swift 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: "&")  
    } 

и this

Пост-запрос с параметром

А также попробуйте добавить строки ниже в моем коде

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

Но не работает, я запускаю запрос, потому что не работает WKWebView экран открыт, но не загружен запрос. Если я не установил navigationDelegate и открою обычный URL, тогда он будет работать полностью. Если я установлю navigationDelegate, тогда все страницы будут приходить на пустую страницу. Запрос как обычный URL fire или параметр post URL fire, все переходят на пустую страницу, я могу Не понимаю, в чем проблема с WKWebView Пожалуйста, помогите мне. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Тело запроса использует тот же формат, что и строка запроса:

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)  
0 голосов
/ 05 марта 2020

Попробуйте, мы инициируем POST-запрос, используя URLSession, преобразуем данные, возвращаемые сервером, в String, и вместо загрузки 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()
...