在 swift 2 中发送 POST 请求
Sending POST request in swift 2
我正在制作一个登录应用程序,当我找到一种方法将 POST 请求发送到 php 并尝试时,要么出现错误,要么没有错误,但没有 运行 我的 php 脚本。提前致谢。我正在使用带有 OS X El Capitan 的 mac 以及 XCODE 7 和 Swift 2。我的服务器是带有 WAMPServer 的旧 windows 电脑。
import UIKit
class Login: UIViewController {
@IBOutlet weak var UserName: UITextField!
@IBOutlet weak var PassWord: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?){
UserName.resignFirstResponder()
view.endEditing(true)
super.touchesBegan(touches, withEvent: event)
}
@IBAction func LoginTapped(sender: AnyObject) {
var UserNameEntered = UserName.text
var PassWordEntered = PassWord.text
let ClientUserNameStored = NSUserDefaults.standardUserDefaults().stringForKey("UserName");
let ClientPassWordStored = NSUserDefaults.standardUserDefaults().stringForKey("PassWord");
if(ClientUserNameStored != UserNameEntered && PassWordEntered != ClientPassWordStored || ClientUserNameStored != UserNameEntered && PassWordEntered == ClientPassWordStored || ClientUserNameStored == UserNameEntered && ClientPassWordStored != PassWordEntered){
print("Not equal")
var Alert = UIAlertController(title: "Warning", message: "Invalid username or password!", preferredStyle: UIAlertControllerStyle.Alert)
Alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action: UIAlertAction!) in UserNameEntered = ""; PassWordEntered = "";
}))
presentViewController(Alert, animated: true, completion: nil)
}else{
let request = NSMutableURLRequest(URL: NSURL(string: "http://host/my/file.php")!)
request.HTTPMethod = "POST"
let postString = "username=\(UserNameEntered)&password=\(PassWordEntered)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
print("response = \(response)")
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
}
task.resume()
self.performSegueWithIdentifier("GoToHome", sender: self)
}
}
}
我的 PHP 代码如下。
<?php
$postVar = $_POST['username'];
$postVartwo = $_POST['password'];
$file = fopen("test.txt", "a");
echo fwrite($file, $postVar."pass".$postVartwo);
fclose($file);
?>
在你 运行 任务之后你执行一个序列。这意味着您离开控制器,控制器将不再存在。没有强引用,这就是为什么你的响应块不会被调用的原因。
删除 performSeque 并重试。
我不允许我的应用程序使用 HTTP。我通过添加
更改了我的 info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我正在制作一个登录应用程序,当我找到一种方法将 POST 请求发送到 php 并尝试时,要么出现错误,要么没有错误,但没有 运行 我的 php 脚本。提前致谢。我正在使用带有 OS X El Capitan 的 mac 以及 XCODE 7 和 Swift 2。我的服务器是带有 WAMPServer 的旧 windows 电脑。
import UIKit
class Login: UIViewController {
@IBOutlet weak var UserName: UITextField!
@IBOutlet weak var PassWord: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?){
UserName.resignFirstResponder()
view.endEditing(true)
super.touchesBegan(touches, withEvent: event)
}
@IBAction func LoginTapped(sender: AnyObject) {
var UserNameEntered = UserName.text
var PassWordEntered = PassWord.text
let ClientUserNameStored = NSUserDefaults.standardUserDefaults().stringForKey("UserName");
let ClientPassWordStored = NSUserDefaults.standardUserDefaults().stringForKey("PassWord");
if(ClientUserNameStored != UserNameEntered && PassWordEntered != ClientPassWordStored || ClientUserNameStored != UserNameEntered && PassWordEntered == ClientPassWordStored || ClientUserNameStored == UserNameEntered && ClientPassWordStored != PassWordEntered){
print("Not equal")
var Alert = UIAlertController(title: "Warning", message: "Invalid username or password!", preferredStyle: UIAlertControllerStyle.Alert)
Alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action: UIAlertAction!) in UserNameEntered = ""; PassWordEntered = "";
}))
presentViewController(Alert, animated: true, completion: nil)
}else{
let request = NSMutableURLRequest(URL: NSURL(string: "http://host/my/file.php")!)
request.HTTPMethod = "POST"
let postString = "username=\(UserNameEntered)&password=\(PassWordEntered)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
print("response = \(response)")
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
}
task.resume()
self.performSegueWithIdentifier("GoToHome", sender: self)
}
}
}
我的 PHP 代码如下。
<?php
$postVar = $_POST['username'];
$postVartwo = $_POST['password'];
$file = fopen("test.txt", "a");
echo fwrite($file, $postVar."pass".$postVartwo);
fclose($file);
?>
在你 运行 任务之后你执行一个序列。这意味着您离开控制器,控制器将不再存在。没有强引用,这就是为什么你的响应块不会被调用的原因。
删除 performSeque 并重试。
我不允许我的应用程序使用 HTTP。我通过添加
更改了我的 info.plist<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>