Search code examples
swiftformsurlpostmanhttp-post

How can I read the content of a form-data when the response is in html(Swift)


I'm building an iOS application and I need to access the information on a website. I've located the API endpoint, and was able to get a result in Postman screenshot of API header and form data

So far I have this code which can allow me to make the request, but how do I parse the response(which is an HTML form, then display response in app

        var urlRequest = URLRequest(url: url!)
        urlRequest.setValue("application/form-data",forHTTPHeaderField: "Content-Type")
        urlRequest.httpMethod = "POST"
        let postString = "year=2021&season=Outdoor&province=ON&age_group=OPEN&age_sub_group_masters=ALL&age_sub_group_para=ALL&rankings_event=100m&best_by_athlete=1&rankings_event_spec_num=1&is_relay_EVENT=0&page=1"
        urlRequest.httpBody = postString.data(using: .utf8)
        
        urlRequest = .init(url: url!)```


Solution

  • I actually found a great resources that showed how to send POST Request with post body, and how to read the response

    How To send POST Request

    Now it's just a matter of parsing the HTML that is returned, and displaying it in app.

            let url = URL(string: Constants.rankingAPI)
            guard let requestUrl = url else {
                fatalError()
            }
            
            var request = URLRequest(url: requestUrl)
            request.httpMethod = "POST"
            
            let postString = "year=2021&season=Outdoor&province=ON&age_group=OPEN&age_sub_group_masters=ALL&age_sub_group_para=ALL&rankings_event=100m&best_by_athlete=1&rankings_event_spec_num=1&is_relay_EVENT=0&page=1"
            
            request.httpBody = postString.data(using: String.Encoding.utf8)
            let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
                
                // Check for Error
                if let error = error {
                    print("Error took place \(error)")
                    return
                }
                
                // Convert HTTP Response Data to a String
                if let data = data, let dataString = String(data: data, encoding: .utf8) {
                    print("Response data string:\n \(dataString.htmlToString)")
                }
            }
            task.resume()
        }