iphone - 获取方案的默认端口?

标签 iphone foundation

有没有办法找出 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/

相关文章:

objective-c - NSSortStable 的文档不符合语法——它想表达什么?

swift -\n 将 AnyObject 转换为字符串后自动添加数组值?

ios - iOS 上的 SSL 固定

iphone - 如何使长文本适合UINavigationBar?

iphone - 我是否正确地向核心数据添加了一个对象?

iphone - UIButton 类似闪烁

linux - 在 Linux 上桥接到/从 CoreFoundation

ios - 无法将排序的字典序列化为 JSON - Swift 3

iphone - 未使用的变量和路径

iphone - 如何在 iphone 中设置选定日期的闹钟?