Use a third-party framework like Alamofire:
let payload = ["login": "Submit", "username": "username", "password": "password", "redirect": "iph.php"]
Alamofire.request(.POST, "http://mywebsite.com/iph.php", parameters: payload)
.response { request, response, data, error in
guard let data = data else {
fatalError("No data returned")
}
do {
let html = try NSXMLDocument(data: data, options: NSXMLDocumentTidyHTML)
let root = html.rootElement()!
let males = try root.nodesForXPath("//td[@id='someinfo']/text()")
let females = try root.nodesForXPath("//td[@id='someinfo2']/text()")
} catch let error as NSError {
print(error.localizedDescription)
}
}
Use only Foundation (i.e. Apple-provided) classes:
let payload = ["login": "Submit", "username": "username", "password": "password", "redirect": "iph.php"]
let request = NSMutableURLRequest(URL: NSURL(string: "http://mywebsite.com/iph.php")!)
request.HTTPMethod = "POST"
request.HTTPBody = NSKeyedArchiver.archivedDataWithRootObject(payload)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(request) { data, response, error in
guard let data = data else {
fatalError("No data returned")
}
do {
let html = try NSXMLDocument(data: data, options: NSXMLDocumentTidyHTML)
let root = html.rootElement()!
let males = try root.nodesForXPath("//td[@id='someinfo']/text()")
let females = try root.nodesForXPath("//td[@id='someinfo2']/text()")
} catch let error as NSError {
print(error.localizedDescription)
}
}
task.resume()
Notes
- Since your request is transported over unsecured HTTP, you may need to set App Transport Security to allow it.
- You can't use Alamofire in a console application, or in a playground.
- Both methods execute asynchronously. You must keep the main queue going while waiting for the response. In a GUI application, the run loop will keep your app going so it's not a concern. For a console application, you can pause the main queue by calling
sleep(secs)
or use Grand Central Dispatch to wait for the request.