获取scheme的默认端口?

时间:2011-10-05 19:37:53

标签: iphone foundation

有没有办法找出NSURLRequest用于满足特定NSURL的端口号?

显然,我可以为http请求硬编码端口80,为https请求编码端口443。但肯定有一种内置方法可以从Cocoa Touch的URL方案中获取端口号。

port上的NSURL方法仅在URL中指定端口时返回值。它适用于http://stackoverflow.com:80,但不适用于更常见的http://stackoverflow.com

这里的上下文是我正在登录一个重定向我的Web服务(Say,from(http://webservice.invalid/path/to/api to http://webservice2.invalid:2003/path/to/api)。所有URL都基于服务的基本URL,我想更新以反映现实并避免将来重定向。

目前,我正在提取方案和主机,但没有考虑到端口可能也会发生变化。如果我没有将端口作为重定向的一部分,我不希望在将来的请求中指定端口。

2 个答案:

答案 0 :(得分:3)

NSURLRequest有一个名为URL的方法,它返回一个NSURL,它有一个名为port的方法。

NSURLRequest request = ...;

NSNumber *port = [[request URL] port];
NSLog(@"Port: %d", [port intValue]);

文档:

  

端口
返回符合RFC的URL的端口号   1808

     

- (NSNumber *)端口
  返回值URL的端口号。   如果接收方不符合RFC 1808,则返回nil。

编辑:

如果未在URL中设置端口并且您知道该方案,则对默认端口进行硬编码没有任何问题。例如。 http = 80, https = 443, ftp = 21。这些端口在标准中定义,您可以将它们存储在代码中的某个常量中,以避免magic numbers

答案 1 :(得分:1)

不要硬编码端口。请改用getservent()