Swift3: HTTP-запрос POST с параметрами, разделенными на & quot; / & quot;

Это приемлемый запрос POST, который принимает сервер (используя codeigniter).

Как показано, он не принимает ключи, а только значения.

Первое значение начинается с «/», а между значениями используется «/».

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

0

Решение

Спасибо @ Tj3n @ Лео Дабус @ GoodSp33d!

Я смог решить проблему, используя ваши предложения.

Сервер php также использовал «URL-кодирование 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()

Это реальный URL запроса POST, который отправил мой код.

http://example.com/index.php/api/signup/1282283772/none/0204291/%E6%84%9B/0/70/null
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]