json - 如何使用 iOS Swift 访问设备中的 vpn api url?

标签 json swift xml vpn nevpnmanager

我使用 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()
}

最佳答案

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

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

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

关于json - 如何使用 iOS Swift 访问设备中的 vpn api url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823624/

相关文章:

java - android json解析不断加载

ios - iOS 10 中的 UILabel,制作文本字体

ios - 在更新功能中开始倒计时

xml - 将 ref 传递给 XML::XPath 对象到 Perl 中的 sub 不能按预期工作

java - 我可以使用根相对 XPath 表达式来获取克隆节点中的节点吗?

regex - 如何使用正则表达式提取器在jmeter中提取json响应数据?

json - 如何为角度示意图输入数组类型值

ios - 使用核心数据设置日期选择器的初始值

c# - 使用 linq to XML 将 xml 文件导入到 datagridview。数据显示不正确

json - Postgres JSON 数据类型 Rails 查询