我在让一个非常简单的 Swift HTTP POST 工作时遇到了一些麻烦。
我目前有简单的命令行项目,main.swift 包含
import Foundation
let url = NSURL(string: "http://127.0.0.1/input.php")!
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
let paramString = "value=100&dataPointId=1"
request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)
session.dataTaskWithRequest(request, completionHandler: {
(let data, let response, let error) in
print("callback")
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
return
}
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(dataString)
}).resume()
我验证了我的 PHP 脚本可以使用 Postman 运行,但是当我运行此代码时,我什么也没得到。我正在查看 Apache 访问日志,它甚至没有尝试 HTTP 请求。
就像回调函数没有被调用一样。我希望至少能看到 print("callback") 的输出,但什么也没有发生。
我的程序是否退出得太快并且不允许回调发生?还是发生了其他事情?
这不是在 Playground 中执行,而是使用内置的 URL 处理库。
最佳答案
发现,程序在回调发生之前就退出了。在程序末尾添加了一个简单的 sleep(5)
,使其有时间完成。在常规的 Cocoa GUI 应用程序中不需要这样做,因为程序不会像这样立即退出。
关于Swift NSMutableURLRequest URLSession 回调未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38287529/