2017-08-28 79 views
0

我一直在看苹果的WWWDC 2015 Session 711:“与NSURLSession联网”。最后,演讲者提到URLSessionStreamTask,它可以用于直接插座I/O。他还提到了一个(HTTP)代理连接如何转换为流任务。如何与URLSession进行代理连接?

一个幻灯片包含:

NSURLSessionStreamTask 
DataTask conversion 

NSURLSessionDataTask may be converted to a stream task 
• Use NSURLSession to get through HTTP proxies 
Conversion can occur when response is received 

而接下来的幻灯片有部分示例代码:

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, 
        didReceiveResponse response: NSURLResponse, 
           completionHandler: (NSURLSessionResponseDisposition) -> Void) { 
    completionHandler(.BecomeStream) 
} 

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, 
       didBecomeStreamTask streamTask: NSURLSessionStreamTask) { 
} 

我想知道如何创建摆在首位的代理连接。如果可能的话,使用“System Preferences”:Network:Advanced:Proxies面板中的数据。 (不只是“HTTP”代理,但具有相同的格式。任何其他4)

而且因为他们通常使用HTTP,而不是HTTPS,做这样的连接触发ATS(应用程序传输安全性)?

回答

0

他们正在讨论的是支持WebSocket protocol,它允许您打开一个到Web服务器的连接,然后将该连接升级到一个Web套接字,从而允许您直接与任何脚本或CGI程序进行通信另一方面不需要遵循传统的请求 - 响应方式。

我认为他们试图说的是,如果您通过实际支持WebSocket通信的代理发送HTTP(ick)请求,iOS知道如何让代理正确升级连接。此相同的升级机制通常用于通过HTTP代理,其中支持将HTTPS请求,如果你做的HTTPS连接,随后的WebSockets升级应,尽管代理的工作,不管是什么,因为代理已经只是路过在这一点上前后来回。

+0

我问的是老派的20世纪90年代的代理,我认为使用HTTP连接。我认为,今天这些仍在使用。您在WebSocket上提供的链接也提到了HTTP-CONNECT。 – CTMacUser

+0

您是否在问如何直接使用它来与不会说HTTP/HTTPS的任意服务器通话?我不认为你可以做到这一点,而无需实现自己的自定义HTTP库。但是,NSURLSession/Connection代码会在需要通过用户为系统范围使用配置的代理建立HTTPS连接时自动使用该命令。 – dgatwood

+0

是不是代理流程:1 - 使用HTTP连接到目标服务器的主机名和端口的代理服务器需要代理的任何用户名/密码一起。 2 - 如果代理服务器返回OK代码,请使用所需协议的连接,对吧?我在问如何构建(1)所需的URLRequest。 – CTMacUser