_kCFStreamErrorCodeKey = -2102仅适用于某些ISP的wifi

侯赛因·贝博迪·拉德

我使用以下代码将文件发送到服务器:

NSString *urlString = [NSString stringWithFormat:@"%@%@",[LIUtility sharedUtility].uploadConnectionURL,BR_SERVER_UPLOAD_ADDRESS_FILE];

self.request =[[NSMutableURLRequest alloc] init];
[self.request setURL:[NSURL URLWithString:urlString]];
[self.request setHTTPMethod:@"POST"];

PKMultipartInputStream *body = [[PKMultipartInputStream alloc] init];

NSString *requestString =[self getRequestStringForRange:range andExtension:fileName];
NSData *requestData = [requestString dataUsingEncoding:NSUTF8StringEncoding];

NSString *jsonLengthString = [NSString stringWithFormat:@"%04lu",(unsigned long)requestData.length];
NSData *jsonLengthData = [jsonLengthString dataUsingEncoding:NSUTF8StringEncoding];

[body addPartWithName:@"jsonLength" data:jsonLengthData];
[body addPartWithName:@"json" data:requestData];
[body addPartWithName:@"separator" string:@"\r\n"];
[body addPartWithName:@"fileData" filename:fileName stream:dataStream streamLength:streamSize];

[self.request setHTTPBodyStream:body];
[self.request setTimeoutInterval:60];
NSString *contentType = LI_CONNECTION_CONTENTTYPE;
[self.request addValue:contentType forHTTPHeaderField: @"Content-Type"];

self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self];
_responseData = [NSMutableData data];
[self.connection start];

该文件以3G / 4G格式上传。当设备连接到某些ADSL ISP的wifi时,该代码也可以使用,但是在某些其他ISP中,该代码不起作用,并且出现以下错误:

错误域= NSURLErrorDomain代码= -1001“请求超时。” UserInfo = {NSErrorFailingURLStringKey = http ://example.net,_kCFStreamErrorCodeKey = -2102,NSErrorFailingURLKey = http:/example.net:80 / au,NSLocalizedDescription =请求超时。,_kCFStreamErrorDomainKey = 4,NSUnderlyingError = 0x16a40410 {Error Domain = kCFErrorDomainCFNetwork代码= -1001“请求超时。” UserInfo = {_ kCFStreamErrorCodeKey = -2102,NSErrorFailingURLStringKey = http ://example.net,NSErrorFailingURLKey = http://example.net,NSLocalizedDescription =请求超时。,_ kCFStreamErrorDomainKey = 4}}}

有谁知道这是什么问题吗?

侯赛因·贝博迪·拉德

我终于通过添加Content-Length请求解决了我的问题

当我们不将Content-Length标头添加到请求中时,NSURLConnection将其作为chunked请求发送,并且看起来这样的问题在分块请求中很常见。

实际上,我没有找到此chunked请求问题的根本原因(我在网络上搜索了很多主题,读了很多文章,与其他几位程序员交谈,但没有发现任何根本原因,所以我决定使用其他解决方案),但是我与可以在其业务中使用非分块请求的人共享了此解决方案。据我了解,分块请求的大多数用法都是实时流式传输,我们不知道,Content-Length因此如果您可以添加Content-Length,我建议使用它来避免此类分块问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章