_kCFStreamErrorCodeKey=-2102 仅适用于某些 ISP 的 wifi
_kCFStreamErrorCodeKey=-2102 only with wifi of some ISPs
我使用以下代码将文件发送到服务器:
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.The 当设备连接到某些 ADSL ISP 的 wifi 时代码也有效,但在其他一些 ISP 中代码不起作用,我收到以下错误:
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://example.net, _kCFStreamErrorCodeKey=-2102, NSErrorFailingURLKey=http:/example.net:80/au, NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x16a40410 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSErrorFailingURLStringKey=http://example.net, NSErrorFailingURLKey=http://example.net, NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4}}}
有人知道问题出在哪里吗?
我终于通过在请求中添加 Content-Length
解决了我的问题。
当我们不将 Content-Length
header 添加到请求中时,NSURLConnection
将其作为 chunked
请求发送,并且这种问题似乎在分块请求中很常见.
实际上我没有找到这个chunked
请求的问题的根本原因(我在网上搜索了很多主题,阅读了很多文章,与其他几个程序员交谈但没有找到任何根本原因,所以我决定使用其他解决方案)但我将此解决方案分享给可以在其业务中使用 non-chunked 请求的人。据我所知,分块请求的大多数用法都是实时流式传输,我们不知道 Content-Length
所以如果你可以添加 Content-Length
,我建议使用它来避免像这样的分块问题。
我刚刚解决了这个问题...
如果您在 Internet 上找不到解决方案,我希望这对您有所帮助,因为这是个人经验。
我已经配置了所有 HTTP headers、所有参数并检查了 Objective-C 上的所有编程,但我忘了检查服务器端,我的架构包括 3 个组件:应用程序、REST服务器和文件服务器,文件服务器与域有网络问题,这就是应用程序无法正常工作的原因,解决问题后它运行良好。
如果您是 运行 应用程序的企业版,请与您的服务器管理员核实您的证书是否是最新的并与您的防火墙服务器兼容。我的不是。
我使用以下代码将文件发送到服务器:
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.The 当设备连接到某些 ADSL ISP 的 wifi 时代码也有效,但在其他一些 ISP 中代码不起作用,我收到以下错误:
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://example.net, _kCFStreamErrorCodeKey=-2102, NSErrorFailingURLKey=http:/example.net:80/au, NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x16a40410 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSErrorFailingURLStringKey=http://example.net, NSErrorFailingURLKey=http://example.net, NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4}}}
有人知道问题出在哪里吗?
我终于通过在请求中添加 Content-Length
解决了我的问题。
当我们不将 Content-Length
header 添加到请求中时,NSURLConnection
将其作为 chunked
请求发送,并且这种问题似乎在分块请求中很常见.
实际上我没有找到这个chunked
请求的问题的根本原因(我在网上搜索了很多主题,阅读了很多文章,与其他几个程序员交谈但没有找到任何根本原因,所以我决定使用其他解决方案)但我将此解决方案分享给可以在其业务中使用 non-chunked 请求的人。据我所知,分块请求的大多数用法都是实时流式传输,我们不知道 Content-Length
所以如果你可以添加 Content-Length
,我建议使用它来避免像这样的分块问题。
我刚刚解决了这个问题...
如果您在 Internet 上找不到解决方案,我希望这对您有所帮助,因为这是个人经验。
我已经配置了所有 HTTP headers、所有参数并检查了 Objective-C 上的所有编程,但我忘了检查服务器端,我的架构包括 3 个组件:应用程序、REST服务器和文件服务器,文件服务器与域有网络问题,这就是应用程序无法正常工作的原因,解决问题后它运行良好。
如果您是 运行 应用程序的企业版,请与您的服务器管理员核实您的证书是否是最新的并与您的防火墙服务器兼容。我的不是。