有没有办法找出 NSURLRequest
将使用什么端口号来满足特定的 NSURL
?
显然,我可以为 http
请求硬编码端口 80,为 https
请求硬编码端口 443。但肯定有一种内置方法可以从 Cocoa Touch 中的 URL 方案获取端口号。
NSURL
上的 port
方法仅在 URL 中指定端口时返回一个值。它适用于 http://stackoverflow.com:80
,但不适用于更常见的 http://stackoverflow.com
。
此处的上下文是我正在登录一个正在重定向我的 Web 服务(例如,从 (http://webservice.invalid/path/to/api 到 http://webservice2.invalid:2003/path/to/api )。所有 URL 均基于该服务的基本 URL,我想更新它以反射(reflect)现实并避免将来的重定向。
目前,我正在提取方案和主机,但没有考虑到端口也可能会发生变化。如果我没有在重定向过程中获得端口,我不想在将来的请求中指定端口。
最佳答案
NSURLRequest
有一个名为 URL
的方法,它返回 NSURL
它有一个名为 port 的方法。
NSURLRequest request = ...;
NSNumber *port = [[request URL] port];
NSLog(@"Port: %d", [port intValue]);
文档:
port
Returns the port number of a URL conforming to RFC 1808.- (NSNumber *)port
Return Value The port number of the URL. If the receiver does not conform to RFC 1808, returns nil.
编辑:
如果 URL 中未设置端口并且您知道该方案,则硬编码默认端口没有任何问题。例如。 http = 80,https = 443,ftp = 21
。这些端口是在标准中定义的,您可以将它们存储在代码中某处的常量中,以避免 magic numbers .
关于iphone - 获取方案的默认端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666737/