我正在尝试部署应用程序相当长一段时间,但由于它不能在Apple的IPv6网络上运行,因此它仍然被拒绝,即使我使用NSURLSession发送POST。我做了更多的尝试而且没有选择,有没有人知道这是一个与他们的测试环境相关的问题还是我的代码? 这是代码:
- (NSData *) postToServer: (NSData *) msg {
__block NSData *urlData = NULL;
self.status = @"offline";
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
NSURL *url = [NSURL URLWithString:@"http://myserver.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:msg];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
self.status = @"offline";
dispatch_semaphore_signal(semaphore);
return;
}
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
if (statusCode >= 200 && statusCode < 300) {
self.status = @"online";
urlData = data;
}
else {
self.status = @"offline";
}
NSLog(@"Código resposta: %ld / Resposta ==> %@", (long)statusCode, [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]);
}
dispatch_semaphore_signal(semaphore);
}];
[postDataTask resume];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
return urlData;
}
如果我在这方面有任何不妥之处,请帮我解决,请大大延迟我的工作时间表,即使阅读所有Apple论坛关于IPv6的主题,也无法弄明白。 (此代码适用于iPhone SE iOS 9.3.2的工作场所,仅在审核时失败。)
谢谢你的帮助。
纳坦
答案 0 :(得分:0)
如OP所述,他的解决方案:
问题出在我的服务器上,该服务器尚未准备好完全为IPv6做好准备。如果它没有IPv6地址,该应用程序可以在仅IPv6网络上合成IPv4地址并正常通信,但我的主机有地址但无法通过它进行响应。如果其他人遇到此问题,请尝试使用此测试:http://ipv6-test.com/validate.php并检查您的主机是否通过了AAAA DNS记录,但是其余的都未通过,那么您应首先查看您的服务器,而不是代码(假设你的代码没问题,NSURLSession和东西。