因此,对于我的 iOS 客户端,我正在启动 POST 来上传大量数据(例如 30MB),通过:
[[NSURLConnection connectionWithRequest:req delegate:self] retain];
但是,我需要处理 URL 错误的情况 - 例如,返回 404 的情况。问题是,我的 didSendBodyData
委托(delegate)方法被一遍又一遍地调用,就像它应该的那样假设 URL 正确,数据 block 大小为 32k,直到文件总大小达到 30MB。我实际上是在这个方法中进行计算来显示和显示进度条,即使使用无效的 URL,它看起来和行为都像是在传输整个文件(我不确定幕后到底发生了什么 - 它可以实际上没有做任何事情,URL 解析为 404!)
然后,在假定的上传 20 秒后,我的 didReceiveResponse
委托(delegate)方法终于被调用,我可以在其中检查 NSURLResponse 并看到是否已提供 404 错误。为什么它看起来像是在我出现任何类型的错误之前就传输了整个文件?使用 [NSURLConnection connectionWithRequest]
,我如何在实际执行任何操作之前知道这是 404?无论如何,是否可以在 didSendBodyData
方法中进行判断,或者有任何其他方式可以比我所看到的更早进行判断?
一个更大的问题是,我让你限制上传时间,所以它会在x秒后停止,此时我取消连接(在didSendBodyData
方法的中间),这样一来,似乎就无法知道 URL 是否出了什么问题。
看起来这应该有一个非常简单的解决方案,但我没有看到它。感谢您的帮助。
最佳答案
根据规范,我认为在完全接收到 HTTP 请求之前,HTTP 服务器不会发回 HTTP 响应。这意味着即使您将大量数据发送到任何地方,您所看到的行为也是预期的。
您可以尝试发送 HTTP Expect Header在你的要求中。否则,您是否考虑过发送初步 ping 请求来检查 url 端点是否存在?也许是没有数据的 POST?然后您可以在提出昂贵的请求之前了解 404 错误。
关于iphone - iOS NSURLConnection POST 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11764540/