【问题标题】:How to access vpn api url in device using iOS Swift?如何使用 iOS Swift 访问设备中的 vpn api url?
【发布时间】:2020-01-09 10:14:50
【问题描述】:

我使用 swiftyJSON 从 api url 消费 OData。这里的api url是连接VPN的。

而且 api url 看起来像 http://192.xxx.xx.xx:8000/sap/opu/odata/sap/Z_SRV/PRListSetSet?$format=json

当我在模拟器中运行时,我可以从 odata api url 获取数据,但是在设备中运行时,没有从 odata api url 接收到数据。 由于没有 vpn 连接到移动设备。如何以编程方式对我的 VPN 进行硬编码以在移动设备中接收数据?

这是我从 OData api url 获取数据的方式:

typealias ServiceResponse = (JSON,Error?) -> Void

class PrListApiManager: NSObject {

static let sharedInstance = PrListApiManager()
let baseURL = apiUrlConstant.prListOdataUrl

func getPrList(onCompletion:@escaping (JSON) -> Void) {

    let route = baseURL
    makeHTTPGetRequest(path: route) { (json: JSON, error: Error?) in
        onCompletion(json as JSON)
    }

}

// MARK: perform a GET Request
private func makeHTTPGetRequest(path: String, onCompletion: @escaping ServiceResponse) {


    let user = ApiloginConstant.user
    let password = ApiloginConstant.password
    let loginString = "\(user):\(password)"
    guard let loginData = loginString.data(using: String.Encoding.utf8) else {
        return
    }
    let base64LoginString = loginData.base64EncodedString()
    print("base 64 login :\(base64LoginString)")
    let headers = ["Authorization": "Basic \(base64LoginString)"]

    // using URL and request getting a json
    let request = URLRequest(url: NSURL(string: path)! as URL)
    let config = URLSessionConfiguration.default
    config.httpAdditionalHeaders = headers
    let session = URLSession.init(configuration: config)

    session.dataTask(with: request) { (data:Data?, response: URLResponse?, error:Error?) in
        if let jsonData = data { // if data has a data and success
            do {
                let json: JSON = try JSON(data: jsonData)
                onCompletion(json,nil)
                print("json data:\(json)")
            }catch {// error
                onCompletion(JSON(),error)
            }
        } else { // if the data is nil
            onCompletion(JSON(),error)
        }
        }.resume()
}

【问题讨论】:

    标签: json swift xml vpn nevpnmanager


    【解决方案1】:

    连接到 VPN 可能不是您的最佳选择。如果您的应用程序旨在公开发布,这可能是一个巨大的安全问题,并且可能会使您的服务器超载。这背后的原因是因为我相信您不能仅通过 VPN 路由 部分 流量。设备中的所有内容要么通过,要么什么都不通过。

    如果您确实需要某种方式来访问您的服务器,请考虑使用仅将该特定服务公开到 Internet 的代理。

    如果您仍想使用 VPN 路由,这里有一个解释如何设置的答案:https://stackoverflow.com/a/39183930/4663856

    【讨论】:

    • 它的内部项目不公开.. 感谢您的回答.. 我是新手,如何在我的项目中使用它.. 任何示例代码..
    • @ParameswaranV 您可以直接从您的设备连接到您的 vpn 吗?除此之外,您还可以使用闪电端口或蓝牙与您的设备共享您的 macbook 连接。这样,当您从设备发出 api 请求时,它将通过 macbook,然后是 vpn。没有?
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多