2017-08-28 81 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