Как получить доступ к URL-адресу VPN API на устройстве с помощью iOS Swift?

Я использую OData из URL-адреса API, используя swiftyJSON. Здесь URL-адрес API связан с VPN.

И URL-адрес API выглядит как http://192.xxx.xx.xx:8000/sap/opu/odata/sap/Z_SRV/PRListSetSet?$format=json

Когда я запускаю симулятор, я могу получить данные из URL-адреса API odata, но во время работы на устройстве данные не получены из URL-адреса API odata. Так как к мобильному устройству не подключен vpn. как я могу программно жестко закодировать свой VPN для получения данных на мобильном телефоне?

вот как я получаю данные из URL-адреса API OData:

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()
}

person PvUIDev    schedule 06.09.2019    source источник


Ответы (1)


Подключение к VPN, вероятно, не лучший вариант. Если ваше приложение предназначено для публичного выпуска, это может стать серьезной проблемой безопасности и может привести к перегрузке ваших серверов. Причина этого в том, что я считаю, что вы не можете направить только некоторую часть трафика через VPN. Либо все с устройства проходит, либо ничего.

Если вам действительно нужен способ получить доступ к вашим серверам, рассмотрите возможность использования прокси-сервера, который предоставляет доступ к Интернету только этой конкретной службе.

Если вы все еще хотите использовать маршрут VPN, вот ответ, который объясняет, как его настроить: https://stackoverflow.com/a/39183930/4663856

person Ashamed question    schedule 08.09.2019
comment
это собственный проект, а не для публики.. Спасибо за ответ.. я новичок в этом, как я могу использовать это в своем проекте.. любой пример кода.. - person PvUIDev; 09.09.2019
comment
@ParameswaranV, вы можете просто подключиться к VPN прямо со своего устройства? Помимо этого, вы также можете поделиться подключением MacBook к своему устройству, используя порт Lightning или синий зуб. Таким образом, когда вы делаете запрос API со своего устройства, он будет проходить через macbook, а затем через vpn. нет? - person Alex; 15.09.2019