当我尝试向服务器上的API发送POST请求时遇到问题,我遵循了许多不同的教程,但仍然无法正常工作。我知道我的问题出在POST请求上,但我解决不了!所以这是我在Swift中的代码以及我在php中的API
:(是的,我已经用代码中的真实ID替换了xxxx)
总结一下,服务器接收到请求,例如,如果我手动输入一个伪指令,它就可以工作,实际上是POST方法不起作用。。服务器未接收到POST参数
SWIFT代码 :
var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8888/academy/test.php")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var params = ["pseudo":"test"] as Dictionary<String, String>
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
println("Response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Body: \(strData)")
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
// Did the JSONObjectWithData constructor return an error? If so, log the error to the console
if(err != nil) {
println(err!.localizedDescription)
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Error could not parse JSON: '\(jsonStr)'")
}
else {
// The JSONObjectWithData constructor didn't return an error. But, we should still
// check and make sure that json has a value using optional binding.
if let parseJSON = json {
// Okay, the parsedJSON is here, let's get the value for 'success' out of it
var success = parseJSON["success"] as? Int
println("Succes: \(success)")
}
else {
// Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Error could not parse JSON: \(jsonStr)")
}
}
})
task.resume()*/
PHP代码:
$BDD_hote = 'xxxxx';
$BDD_bd = 'xxxxx';
$BDD_utilisateur = 'xxxxx';
$BDD_mot_passe = 'xxxxx';
try{
$bdd = new PDO('mysql:host='.$BDD_hote.';dbname='.$BDD_bd, $BDD_utilisateur, $BDD_mot_passe);
$bdd->exec("SET CHARACTER SET utf8");
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e){
echo 'Erreur : '.$e->getMessage();
echo 'N° : '.$e->getCode();
}
$pseudo = addslashes($_POST["pseudo"]);
$req = $bdd->query("SELECT * from users WHERE pseudo='$pseudo'");
$resultArray = array();
$donnees = $req->fetch();
echo json_encode($donnees);
在此先感谢:)
试试这个:
let myURL = NSURL(string: "http://localhost:8888/academy/test.php")!
let request = NSMutableURLRequest(URL: myURL)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
let bodyStr:String = "pseudo=test"
request.HTTPBody = bodyStr.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// Your completion handler code here
}
task.resume()
swift”。实际上,我通常会为NSMutableURLRequest创建一个扩展,并添加一个方法,该方法以字典作为参数,并使用正确的编码将此地图(字典)的内容设置为HTTPBody。这可能对您有用:
extension NSMutableURLRequest {
func setBodyContent(contentMap: Dictionary<String, String>) {
var firstOneAdded = false
let contentKeys:Array<String> = Array(contentMap.keys)
for contentKey in contentKeys {
if(!firstOneAdded) {
contentBodyAsString += contentKey + "=" + contentMap[contentKey]!
firstOneAdded = true
}
else {
contentBodyAsString += "&" + contentKey + "=" + contentMap[contentKey]!
}
}
contentBodyAsString = contentBodyAsString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
self.HTTPBody = contentBodyAsString.dataUsingEncoding(NSUTF8StringEncoding)
}
}
您可以将其用作:
request.setBodyContent(params)
我希望这可以帮助你!
问题内容: 我正在尝试使用Swift来对REST API进行GET调用,并且试图遵循众多教程,但无法弄清楚。要么是因为我无法弄清楚如何将所有Obj- C转换为Swift,要么是因为不赞成使用n’这样的方法的一半。有谁知道如何进行调用以及解析返回的JSON数据? 问题答案: 您可以这样做: 编辑:对于对此有疑问的人,也许您的JSON流是数组[]而不是对象{},因此您必须将jsonResult更改为
问题内容: 我正在开发需要检查作业截止日期的应用程序。我想知道到期日期是否在下个星期之内,然后再执行一项操作。 我可以找到的大多数文档都在Objective-C中,但我不知道如何在Swift中完成。谢谢您的帮助!! 问题答案: 我喜欢使用扩展使代码更具可读性。以下是一些NSDate扩展,它们可以帮助清理代码并使其易于理解。我把它放在一个sharedCode.swift文件中: 现在,如果您可以执行
问题内容: 如何将以下Objective-C代码转换为Swift代码? 我正在格式化。 问题答案:
本文向大家介绍Swift 进阶 —— map 和 flatMap的使用,包括了Swift 进阶 —— map 和 flatMap的使用的使用技巧和注意事项,需要的朋友参考一下 map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。 集合上使用 map 和 flatMap 先看如下的代码: 输入是一个一维数组,转换后 infos1 的结果是如下的一个二维数组,所以 m
我终于学会了用Reactor进行函数式编程。所以我是新手。 我要做的第一件事是使用WebClient调用外部API。这个调用需要是递归的,因为响应提供了调用参数的下一个值,我需要在下一个调用中使用它,直到满足微不足道的情况。 下面是我的想法: 似乎我需要把我的想法调整到这种编程风格,所以请给我一些例子 谢谢
问题内容: 当我编写HQL查询时 一切安好。但是,当我编写标准时 我有一个例外 如果我想使用“标准和顺序”,我应该如何表达我的“顺序”? 问题答案: 您需要为创建别名。你是这样做的。