有没有办法找出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,我想更新以反映现实并避免将来重定向。
目前,我正在提取方案和主机,但没有考虑到端口可能也会发生变化。如果我没有将端口作为重定向的一部分,我不希望在将来的请求中指定端口。
答案 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()
。