从 iOS 9 / Swift 2.0 发送 HTTP POST 请求时,PHP 服务器没有收到正确的数据
Posted
技术标签:
【中文标题】从 iOS 9 / Swift 2.0 发送 HTTP POST 请求时,PHP 服务器没有收到正确的数据【英文标题】:Not receiving correct data at PHP server when sending an HTTP POST Request from iOS 9 / Swift 2.0 【发布时间】:2015-11-03 10:07:07 【问题描述】:当我使用 Swift 从 ios 发布 "username=abc&password=xyz" 到 index.php 时,我必须在我的服务器上接收
$_POST["username"]
//“abc”
$_POST["password"]
//“xyz”
但我收到了
$_POST["username"]
//可选(“abc”)
$_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>
上面的代码在带有 iOS 8.4 的 Xcode 6 中完美运行,但是在升级到带有 iOS 9.0 的 Xcode 7 后问题就开始了
【问题讨论】:
【参考方案1】:dataUsingEncoding
返回一个可选值。您必须在将其发送到请求中之前将其打开
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)!
【讨论】:
谢谢本杰明,您的解决方案对我有用。但是我发现了一件奇怪的事情,现在我上面发布的问题代码也可以正常工作,无需任何更改。只是想知道 iOS 开发有时会变得疯狂!!!以上是关于从 iOS 9 / Swift 2.0 发送 HTTP POST 请求时,PHP 服务器没有收到正确的数据的主要内容,如果未能解决你的问题,请参考以下文章
无效的 Swift 支持 - 适用于 iOS 9 的 Swift 2.0 项目,(Xcode build 7A220)
MKAnnotations 未显示在地图上 iOS 9 / Swift 2.0
iOS 9(Swift 2.0):无法使用类型为“(NSURL,(_,_,_)throws-> Void)”的参数列表调用“dataTaskwithURL”