所以我有NSURLSession设置来跟踪重定向,如果它与一个呈现。委托捕获重定向,然后使用dataTaskWithRequest创建NSURLSessionDataTask,并将willPerformHTTPRedirection的重定向作为其参数。它适用于我的网络上的所有东西,除了执行这个奇怪的东西的路由器(见下面的日志):
- [NSURLSession] willPerformHTTPRedirection: <NSURLRequest: 0x60000000d500> { URL: http://192.168.1.1:80:8000/, Method GET, Headers {
Accept = (
"*/*"
);
"Accept-Encoding" = (
"gzip, deflate"
);
"Accept-Language" = (
"en-us"
);
} }
- [NSURLSession] willPerformHTTPRedirection: <NSURLRequest: 0x60000000d540> { URL: http://192.168.1.1:80:8000:8000/, Method GET, Headers {
Accept = (
"*/*"
);
"Accept-Encoding" = (
"gzip, deflate"
);
"Accept-Language" = (
"en-us"
);
} }
-[NSURLSession] willPerformHTTPRedirection: <NSURLRequest: 0x60000000d6b0> { URL: http://192.168.1.1:80:8000:8000:8000/, Method GET, Headers {
Accept = (
"*/*"
);
"Accept-Encoding" = (
"gzip, deflate"
);
"Accept-Language" = (
"en-us"
);
} }
基本上它会继续将重定向端口附加到地址的末尾。不知道为什么这样做。每个其他地址(其中30个)完全按预期工作,并遵循所有重定向到最后。我将设置最大重定向大约10,但这仍然不应该发生。任何人都知道是什么原因造成的?
以下是curl的一些结果。 ... 1.115工作正常,而...... 1.1没有。根据卷曲结果,我注意到的主要区别是115上的位置丢弃端口并在之后添加重定向,而1.1更改端口。我尝试连接到... 1.1没有任何端口,重定向工作正常,但不幸的是我的代码需要一个端口作为字符串的一部分。
Error: Error Domain=NSURLErrorDomain Code=-1007 "too many HTTP redirects" UserInfo={NSUnderlyingError=0x604000c4bcd0 {Error Domain=kCFErrorDomainCFNetwork Code=-1007 "(null)"}, NSErrorFailingURLStringKey=http://192.168.1.1:80:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000/, NSErrorFailingURLKey=http://192.168.1.1:80:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000:8000/, NSLocalizedDescription=too many HTTP redirects}
答案 0 :(得分:0)
您可能会获得一个已有端口号并添加第二个的URL。您的Web服务器上的那个或一些自定义脚本正在这样做。
在您的代码段中,不是按照您的方式添加端口,而是在没有它的情况下构建URL,然后执行以下操作:
NSURLComponents *components = [NSURLComponents componentsWithURL:HOST_URL];
components.port = 80; // or whatever
HOST_URL = [components URL];
如果这还没有解决问题,那么它可能发生在您的服务器/路由器上的脚本中,并且可能没有任何关于它的操作,具体取决于。