我在iOS上使用ASIHttpRequest来上传文件。在某些情况下,用户无法上传文件(因为某些条件未得到满足),因此我的服务器需要使用自定义标头返回错误(400状态代码)。当它发生时,ASIHttpRequest失败但没有状态代码和响应头......
但它仅适用于大数据(超过1M)。对于较小的数据,它是有效的。我挖掘了源代码并发现当服务器在发送所有数据之前返回400时,CFNetwork返回 kCFStreamEventErrorOccurred ,从这里开始,除了读取流中的错误之外,读取其他内容是不可能的。但是,如果在发送所有数据后请求失败,它会发送 kCFStreamEventEndEncountered ,并且可以从此处读取状态码和响应读取器。
由于ASIHttpRequest已经停止,我想自己解决,但我还没有找到如何做到这一点。我担心这是CFNetwork的限制......我在互联网或文档上找不到任何内容......
有谁知道如何处理?或者对CFNetwork足够了解给我一些线索?
谢谢!
答案 0 :(得分:0)
好的,我找到了答案。
我已在服务器端修复它。如果它返回一个带有正文的错误(甚至只有一个字符)它可以在iOS端运行,CFNetwork就能够读取状态代码和标题。
我在服务器上使用Tomcat和Spring,当你只在响应中设置状态代码时,它可能是一个错误。也许它没有正确关闭响应流,我不知道。
CFNetwork似乎是非常明智的......因为它与NSUrlRequest没有任何组合。