gpt4 book ai didi

swift - 由于内容长度严格,HTTP 加载失败 - 预计收到 : 3732, 收到 : 2661,(未压缩):0

转载 作者:行者123 更新时间:2023-11-30 10:36:08 28 4
gpt4 key购买 nike

当请求的内容长于表中的几行时,我在 Swift 4.2 中执行 HTTP 请求时遇到问题。我正在开发一个应用程序,需要显示 30 - 40 行的概述,每行包含 4-5 个变量。

我使用 HTTPRequest 从远程服务器获取数据,然后将其呈现在 UIViewController 的表格 View 中。

当我这样做时,请求有时会完成,有时则不会。如果没有,我会在控制台中收到此消息,

HTTP load failing due to strict content length - expected: 3732, received: 2661, received (uncompressed): 0

我尝试过较小的请求,每次都很好地完成。问题是我已经将服务器的响应修剪得尽可能小,但仍然遇到这个问题。

我认为这可能与 NSAppTransportSecurity 有关,因此我尝试将 info.plist 中的 NSAllowsArbitraryLoads 设置为 true,但这没有任何改变。

我在 flask 端使用 json.dumps 来发送数据。我还尝试创建一个设置了内容长度的 Request 实例,但这没有效果。我也尝试过 jsonify 但没有改变。

我在谷歌上搜索了很多,但没有找到一个问题/答案来解释为什么会发生这种情况。

为了澄清起见,服务器的答案如下所示:

[["weight_unit": "kg", "actual_reps": 6, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": deadlift_with_bar, "weight": 50], ["weight_unit": "kg", "actual_reps": 6, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": deadlift_with_bar, "weight": 50], ["weight_unit": "kg", "actual_reps": 6, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": deadlift_with_bar, "weight": 50], ["weight_unit": "kg", "actual_reps": 8, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": deadlift_with_bar, "weight": 50], ["weight_unit": lb, "actual_reps": 6, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": squat_machine, "weight": 35], ["weight_unit": lb, "actual_reps": 10, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": squat_machine, "weight": 75], ["weight_unit": lb, "actual_reps": 10, "no_calories": 82, "date": 2019-09-13, "actual_excercise_id": squat_machine, "weight": 95]]

如上所述,它有时会到达应用程序,有时不会。

发布请求代码:

   static func makeHTTPRequest(path:String, data:[String:Any], onSuccess: ((_ response:[String: Any]) -> Void)?) {
let session = URLSession.shared

let url_str = path
let url = URL(string: url_str)
var request = URLRequest(url: url!)
request.httpMethod = "POST"

do {
request.httpBody = try JSONSerialization.data(withJSONObject: data, options: .prettyPrinted)
} catch let error {
print(error.localizedDescription)
}

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}

guard let data = data else {
return
}

do {
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
if json["answer"] as! String == "ok"
{
DispatchQueue.main.async {
if let onSuccess = onSuccess {
onSuccess(json)
}
}
}
}
} catch let error {
print(error.localizedDescription)
}

})

task.resume()
}

非常感谢任何帮助!

最佳答案

我也有类似的问题。事实证明,API 人员在计算内容长度 header 时存在错误。除非服务器返回“分块”,否则需要正确计算响应大小。我会使用 Insomnia 或其他工具(如 Postman)来调试不同场景(长请求和短请求)的 http 响应。

关于swift - 由于内容长度严格,HTTP 加载失败 - 预计收到 : 3732, 收到 : 2661,(未压缩):0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991149/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com