Когда я публикую «Имя пользователя = а&пароль = хуг» из iOS с помощью Swift в index.php, на моем сервере я должен получить
$_POST["username"]
// «а»
$_POST["password"]
// «хуг»
но я получаю
$_POST["username"]
// Дополнительно ( «а»)
$_POST["password"]
// Дополнительно ( «XYZ»)
Найти проблемы в выяснении ошибки. Пожалуйста, предложите подходящее решение.
Замечания: I am using Xcode 7.0.1, Swift 2.0, Simulator: iPhone 5, Deployment Target: iOS 9.0, Server = "Apache/2.4.12 (Win32) OpenSSL/1.0.1m PHP/5.6.11";
Вот мой быстрый код
let request = NSMutableURLRequest(URL:NSURL(string:"http://192.168.1.7/testSwiftPOST/index.php")!)
request.HTTPMethod = "POST"let postString = "username=abc&password=xyz"request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ (data, response, error) -> Void in
if let Data = data {
print(NSString(data: Data, encoding: NSUTF8StringEncoding)!) // this prints the data of the $_POST variable in the debug area
}
}
task.resume()
Вот мой php код
<?php
print_r($_POST);
Вот мой вывод в области отладки Xcode:
Array
(
[username] => Optional("abc")
[password] => Optional("xyz")
)
К вашему сведению, я также добавил следующие настройки в мой файл info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>192.168.1.7/</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Приведенный выше код прекрасно работал в Xcode 6 с iOS 8.4, но проблема началась после обновления до Xcode 7 с iOS 9.0
dataUsingEncoding
возвращает необязательный. Вы должны распаковать его перед отправкой в запросе
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)!
Других решений пока нет …