这是服务器(使用codeigniter)接受的可接受POST请求。
如图所示,它不接受键,而只接受值。
第一个值以“/”开头,两个值之间使用“/”。

http://example.com/index.php/api/signup/value01/value02/value03

我有这个密码,用Swift3写的。
let serverUrl = "http://example.com/index.php/api/signup"
let parameterString = "/value01/value02/value03"

let url: URL = URL(string: serverUrl)!
let session = URLSession.shared
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
request.httpBody = parameterString.data(using: String.Encoding.utf8)

let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in

}) task.resume()

它得到一个错误,服务器响应它没有收到任何参数。
但是,如果我复制粘贴下面的代码到浏览器,它工作得很好。
http://example.com/index.php/api/signup/value01/value02/value03

swift3代码适用于另一个服务器,该服务器接受以这种方式编写的POST请求。
http://example.com/api?key=value&key=value

最佳答案

谢谢你@Tj3n@Leo Dabus@GoodSp33d!
我能用你的建议解决这个问题。
服务器php还使用“URL encode RFC 1738(例如,”%E6%84%9B“表示”愛“)”表示某些字符串值。
所以,我补充说

let newString = oldString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)!

编码一些字符串值并解决问题。
所以,这是一个简化版的解决方案。
let serverUrl = "http://example.com/index.php/api/signup/value01/value02/value03"

let url: URL = URL(string: serverUrl)!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in

}) task.resume()

这是我的代码发送的真正的POST请求url。
http://example.com/index.php/api/signup/1282283772/none/0204291/%E6%84%9B/0/70/null

关于php - Swift3:HTTP POST请求,参数除以“/”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40733158/

10-09 01:22