Alamofire JSON 参数编码失败,并带有弹性搜索



我正在尝试使用 alamofire 和 swift 4 向弹性搜索发出请求。我尝试了 json 参数的每种编码类型,但请求仍然超时。如果我输入 nil 参数,响应会很好,但我想构建一些查询参数。

我尝试像这样构建参数:

let jsonString = "{ "query": { "multi_match": { "query": "param1 param2 alabala etc", "fields": ["title", "description", "category"], "fuzziness": 5 } } }"
let data = jsonString.data(using: .utf8)
do {
let params = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]
print("ParamsJSON: (params)")
} catch {
print(error)
}

也像这样:

let params1 = [
"query": [
"multiMatch": [
"query" : "param1 param2 alabala etc",
"fields" : ["title*2, description*1.5"],
"fuzziness" : 5
]
]
]

我的阿拉莫火请求也在这里:

let headers = [
"Content-Type": "application/json"
]
let url = "someurl"
let request = Alamofire.request(url, method: .get, parameters: params1, encoding: JSONEncoding.default, headers: headers)
.authenticate(user: "user", password: "pass")
.responseJSON { response in
if let data = response.data{
do{
let json = try JSON(data: data)
completion(json)
} catch {
}
}
}
debugPrint(request)

URL 和身份验证之所以有效,是因为查询无需向其发送参数即可工作。仅当我发送参数时,alamofire 返回请求超时错误。

有人可以帮我解决这个问题吗?

对于每个正在寻找答案的人来说。发生这种情况的原因是 GET 请求通常没有正文(它适用于 cURL 和一些用于测试目的的服务器(。

所以答案是,您需要将请求从 .get 更改为 .post。

最新更新