Не удается получить правильные данные на PHP-сервере при отправке HTTP-запроса POST из iOS 9 / Swift 2.0

Когда я публикую «Имя пользователя = а&пароль = хуг» из 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

0

Решение

dataUsingEncoding возвращает необязательный. Вы должны распаковать его перед отправкой в ​​запросе

request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)!
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]