Я пытаюсь подключиться к базе данных MySQL с помощью Swift через PHP, получив HTML-код PHP-скрипта. Я планирую использовать URL для передачи переменных, таких как имя пользователя, пароль или идентификатор, в сценарий PHP, а затем вызвать MySQL. Тем не менее, всякий раз, когда я пытаюсь получить ответ веб-страницы с NSURL
происходит ошибка Вот код, который я использую:
let myUrl = NSURL(string: "http://www.google.com")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if error != nil {
print("Error: \(error)")
}
print("Response: \(response)")
print("Response String: \(responseString)")
}
task.resume()
Нужно ли форматировать вывод с веб-сайта, чтобы он был правильно перенесен в Swift? Спасибо вам за помощь.
Ваш код работает на площадке Xcode 7.1 без каких-либо ошибок. Чтобы асинхронный код выполнялся на игровой площадке, я добавил 2 строки. Попробуй сам. Поэтому я думаю, что проблема заключается в вашем сервере.
import Foundation
import XCPlayground
// Let asynchronous code run
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let myUrl = NSURL(string: "http://www.google.com")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if error != nil {
print("Error: \(error)")
}
print("Response: \(response)")
print("Response String: \(responseString)")
}
task.resume()
Если вы не можете понять, в чем дело, сообщение об ошибке поможет другим узнать, что произошло.
ОБНОВИТЬ:
Я попробовал ваш код в проекте iOS, код вылетает, потому что вы не проверяете, равны ли данные нулю, а просто разворачиваете их в этой строке:
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
Но почему данные оказываются нулевыми? Это связано с тем, что App Transport Security в iOS 9 не позволяет использовать HTTP по умолчанию. Ваш сервер должен быть HTTPS с TLS v1.2 или выше. Чтобы разрешить HTTP-запросы, обратитесь к этому: Настройка исключений безопасности транспорта приложений в iOS 9 и OSX 10.11
Также вы должны проверить ошибку перед использованием данных, чтобы избежать сбоя.
let myUrl = NSURL(string: "http://www.google.com")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// Check error before using the data
if error != nil {
print("Error: \(error)")
return
}
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Response: \(response)")
print("Response String: \(responseString)")
}
task.resume()
Других решений пока нет …