gpt4 book ai didi

php - Swift HTTP Post Request dataUsingEncoding 格式错误的字符串

转载 作者:可可西里 更新时间:2023-10-31 23:44:15 24 4
gpt4 key购买 nike

我目前正在和提出这个问题的人一起开发一个应用程序:Post request always wrapped by optional text他负责 iOS 部分的编程,我负责 Android 部分的编程,我完全不知道这整个 Swift 的东西是什么让 iOS 中的编码有点困难,因为他几乎没有编程经验。

现在回答问题:我们正在向我编写的 php 脚本发送 POST 请求,该脚本获取发布的用户名和密码并再次向应用程序发送 json 响应。

$username = $_POST['username'];
$password = $_POST['password'];
if (!empty($username) && !empty($password)) {
$encrypted_password = md5($password);
$user -> login($username,$encrypted_password);
} else {
$json['error'] = 'You must fill all fields!';
echo json_encode($json);
mysqli_close($this->connection);
}

例如,如果用户名或密码为空,我们应该得到这样的响应:

{"error":"You must fill all fields!"}

对于 Android,这非常有效,我们可以处理响应。

但在 iOS 中,当我们对字符串进行编码时,它会将我们发送到 php 脚本的整个字符串转换为:

Optional(<75736572 6e616d65 3d612670 61737377 6f72643d 61>)

因为 php 脚本需要这样的数据:

username=xyz&password=xyz

当然不行。

那么我们如何才能将这个蹩脚的十六进制代码转换成我们想要的,或者我们如何才能防止这种畸形。

提前致谢:D

编辑

Swift 代码:

let username = UsernameTextField.text ?? ""
let password = PasswordTextField.text ?? ""

if(username.isEmpty || password.isEmpty) {return; }



let request = NSMutableURLRequest (URL: NSURL(string: "http://myip/loginregister.php")!)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")
let postString = "username=\(username)&password=\(password)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil && data != nil else {
// check for fundamental networking error
print("error=\(error)")
return
}

let data = postString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!


do {
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary {
let success = json["success"] as? Int
print("Success: \(success)")
} else {
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: \(jsonStr)")
}
} catch let parseError {
print(parseError) `JSONObjectWithData`
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
}
}

task.resume()

错误信息:

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
Error could not parse JSON: 'Optional(username=a&password=a)'

最佳答案

a) 你丢弃了服务器的答案...

b) 熟悉调试器并检查 postString 的内容;它永远不是有效的 JSON,因此您不能期望转换成功。

c) 不要混淆发送和接收部分,而是一个接一个地解决问题。

d) 当您将结果作为评论在线发布时,回答起来会容易得多。

关于php - Swift HTTP Post Request dataUsingEncoding 格式错误的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35204596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com