ios - Alamofire JSON 参数编码因 elasticsearch 失败
问题描述
我正在尝试使用 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
]
]
]
我的alamofire请求也在这里:
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。
推荐阅读
- regex - 简单的字符替换正则表达式,标记 jsonpath
- pentaho-cde - 在 Pentaho CDE 上使用查询组件显示数据
- javascript - 获取单个数据后如何强制 Flatlist 重新渲染?
- sql - 为什么要在应用级别管理数据完整性?既然我们可以在数据库级别做到这一点?为什么要避免数据库级别的约束?
- python - 从获取名称到列表中的 Tkinter 信息
- mongodb - 第一个匹配步骤后 MongoDB 聚合管道变慢
- gluon-mobile - bootClasspath 属性未知
- asp.net-core - Microsoft ASP.NET Core 多重安全和 Microsoft ASP.NET Core 欺骗漏洞
- azure - Azure cosmos db 别名列 order by
- android - 如何使用 Mockito 或 Roboelectric 为以下代码编写测试