2017-03-06 12 views
12

重複してマークしないでください。既存のスレッドで問題を解決できませんでした。Alamofire 4とSwift 3でProxy Serverを使用する方法

指定されたIPを必要とするAPIリクエストに対して私のプロキシを使用しようとしています。 問題をデバッグするには、WebサービスからIPを要求しています。

これは私の現在のコードです:

import UIKit 
import Alamofire 

class ViewController: UIViewController { 

    var requestManager = Alamofire.SessionManager.default 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(true) 

     var proxyConfiguration = [NSObject: AnyObject]() 
     proxyConfiguration[kCFNetworkProxiesHTTPProxy] = "http://[email protected]" as AnyObject? 
     proxyConfiguration[kCFNetworkProxiesHTTPPort] = "9293" as AnyObject? 
     proxyConfiguration[kCFNetworkProxiesHTTPEnable] = 1 as AnyObject? 

     let cfg = Alamofire.SessionManager.default.session.configuration 
     cfg.connectionProxyDictionary = proxyConfiguration 

     let ip = URL(string: "https://api.ipify.org?format=json") 

     requestManager = Alamofire.SessionManager(configuration: cfg) 
     requestManager.request(ip!).response { response in 
      print("Request: \(response.request)") 
      print("Response: \(response.response)") 
      print("Error: \(response.error)") 

      if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) { 
       print("Data: \(utf8Text)") 
      } 
     } 
    } 
} 

問題:にresponsed IPを持つかproxyConfigurationない同じです。どんな助けもありがとうございます。

PS:物理デバイスが使用されています。

答えて

9

私は(廃止されることになって)作業を考えるのキーは以下のとおりです。

kCFStreamPropertyHTTPSProxyHost 
kCFStreamPropertyHTTPSProxyPort 

あなたはこのコードを試してみてもらえますか?

import UIKit 
import Alamofire 

class ViewController: UIViewController { 

    var requestManager = Alamofire.SessionManager.default 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(true) 

     var proxyConfiguration = [NSObject: AnyObject]() 
     proxyConfiguration[kCFNetworkProxiesHTTPProxy] = "eu-west-static-01.quotaguard.com" as AnyObject? 
     proxyConfiguration[kCFNetworkProxiesHTTPPort] = "9293" as AnyObject? 
     proxyConfiguration[kCFNetworkProxiesHTTPEnable] = 1 as AnyObject? 
     proxyConfiguration[kCFStreamPropertyHTTPSProxyHost as String] = "eu-west-static-01.quotaguard.com" 
     proxyConfiguration[kCFStreamPropertyHTTPSProxyPort as String] = 9293 
     proxyConfiguration[kCFProxyUsernameKey as String] = xxx 
     //proxyConfiguration[kCFProxyPasswordKey as String] = "pwd if any" 
     let cfg = Alamofire.SessionManager.default.session.configuration 
     cfg.connectionProxyDictionary = proxyConfiguration 

     let ip = URL(string: "https://api.ipify.org?format=json") 

     requestManager = Alamofire.SessionManager(configuration: cfg) 
     requestManager.request(ip!).response { response in 
      print("Request: \(response.request)") 
      print("Response: \(response.response)") 
      print("Error: \(response.error)") 

      if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) { 
       print("Data: \(utf8Text)") 
      } 
     } 
    } 
} 

また、プロキシサーバーがhttps要求を処理するように設定されていることを確認してください。

注:これは、これらのキーが、キーのdeprecated警告まだ働いている(https://forums.developer.apple.com/thread/19356#131446を参照)

注意を与えるかもしれない:私は同じ答えhereを掲載。それをここにも当てはまるように転記してください。 Alamofireは同じURLSessionConfigurationを使用しています。

+0

ユーザー名とパスワードのプロパティキーが追加されました。私はそれらが機能するようにも必要とされるだろうと思う。 – manishg

1

は私がhttps定数が推奨されておらず、いつでも削除することができ、警告

let configuration = URLSessionConfiguration.default 
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders 

var proxyConfiguration = [String: AnyObject]() 
proxyConfiguration.updateValue(1 as AnyObject, forKey: "HTTPEnable") 
proxyConfiguration.updateValue("eu-west-static-01.quotaguard.com" as AnyObject, forKey: "HTTPProxy") 
proxyConfiguration.updateValue(9293 as AnyObject, forKey: "HTTPPort") 
proxyConfiguration.updateValue(1 as AnyObject, forKey: "HTTPSEnable") 
proxyConfiguration.updateValue("eu-west-static-01.quotaguard.com" as AnyObject, forKey: "HTTPSProxy") 
proxyConfiguration.updateValue(9293 as AnyObject, forKey: "HTTPSPort") 
configuration.connectionProxyDictionary = proxyConfiguration 

sharedManager = Alamofire.SessionManager(configuration: configuration) 

を避けるために、次を使用しManishgの答えをオフに基づいています。文字列の値を使用すると、コードが壊れてもクラッシュすることはありません。

関連する問題