ОБНОВЛЕНИЕ Для меня проблема была исправлена, как только я вставил в свой запрос "encoding: URLEncoding (destination: .queryString)".Может быть, это помогает кому-то еще. ссылка
Я целый день пытался найти проблему в моем запросе PUT Alamofire или в API Flask Restful.Такие запросы как GET, DELETE и POST работают нормально с Alamofire , , за исключением запроса PUT. Когда я использую запросы PUT в сочетании с Почтальон и Flask-Restful все также работает нормально.Но как только я пытаюсь достичь того же результата с Alamofire , я не получаю никаких параметров во Flask.Я попытался проиллюстрировать это в примерах кода.
Итак, вкратце мой пример иллюстрирует следующее:
DELETE Request (То же самое с GET и POST)
Почтальон: успех
Alamofire: успех
PUT-запрос
Почтальон: успех
Alamofire: сбой (словарь параметров пуств Flask-Restful)
Вот мой код Python [API-сервер]:
from flask import Flask, request, jsonify
from flask_restful import Resource, Api, reqparse
app = Flask(__name__)
api = Api(app)
class Stackoverflow(Resource):
def delete(self):
print(request.args)
if request.args.get('test-key') is None:
return jsonify({"message": "failure"})
else:
return jsonify({"message": "success"})
def put(self):
print(request.args)
if request.args.get('test-key') is None:
return jsonify({"message": "failure"})
else:
return jsonify({"message": "success"})
api.add_resource(Stackoverflow, '/stackoverflow')
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Если я использую Почтальон, я получаю этот результат (как и ожидалось): Результатв Почтальоне
Но сейчас я пытаюсь сделать то же самое с Alamofire в Swift.Тот же сервер, ничего не изменилось.
Демонстрационный код SWIFT [IOS APP]:
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view
simplePUTRequest()
simpleDELETERequest()
}
func simplePUTRequest(){
AF.request("http://localhost:5000/stackoverflow", method: .put, parameters: ["test-key":"testvalue"])
.validate(statusCode: 200..<300)
.responseJSON { response in
if let data = response.data {
print("Result PUT Request:")
print(String(data: data, encoding: .utf8)!)
//print(utf8Text)
}else{
}
}
}
func simpleDELETERequest(){
AF.request("http://localhost:5000/stackoverflow", method: .delete, parameters: ["test-key":"testvalue"])
.validate(statusCode: 200..<300)
.responseJSON { response in
if let data = response.data {
print("Result DELETE Request:")
print(String(data: data, encoding: .utf8)!)
//print(utf8Text)
}else{
}
}
}
Консоль Xcode:
Result PUT Request:
{
"message": "failure"
}
Result DELETE Request:
{
"message": "success"
}
Консоль python (оба запроса Alamofire):
ImmutableMultiDict([])
127.0.0.1 - - [15/Jun/2019 21:17:31] "PUT /stackoverflow HTTP/1.1" 200 -
ImmutableMultiDict([('test-key', 'testvalue')])
127.0.0.1 - - [15/Jun/2019 21:17:31] "DELETE /stackoverflow?test-key=testvalue HTTP/1.1" 200 -
Как видите, я получаю сообщение об успехе только при использовании метода DELETE.До сих пор я пытался использовать разные кодировки, такие как URLEncoding.httpbody и URLEncoding.default, но ничего не помогло.Мне кажется, что это проблема Alamofire / Swift, потому что в Postman тот же метод запроса работает нормально.Я был бы очень признателен за вашу помощь, потому что я застрял и не знаю, что делать дальше.Надеюсь, я не понял что-то важное.Заранее спасибо!