URLSession или Alamofire.Request не работают с тире в URL?

Я пытаюсь сделать запрос на следующий URL

https://cactus.nci.nih.gov/chemical/structure/530-62-1/smiles

этот запрос должен просто вернуть простой текст:

Clc1ccc(C=O)cc1

Использование кода на такой игровой площадке прекрасно работает:

var cas = "530-62-1"
let url = URL(string: "https://cactus.nci.nih.gov/chemical/structure/\(cas)/smiles")
var result = ""

let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in

    //print(response!)
    result = String(data: data!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
    print(result)
}

task.resume()

Но если я попытаюсь использовать код в своем проекте macOS (используя Swift 4 и Xcode 9), ориентированный на macOS 10.13, я получаю

URL-адрес для запроса: https://cactus.nci.nih.gov/chemical/structure/104-88-1/smiles 2017-10-10 17:23:08.475739+0100 AimieSmiles[18012:3495056] dnssd_clientstub ConnectToServer: connect() failed path:/var/run/ mDNSResponder Socket:11 Err:-1 Errno:1 Операция не разрешена 10.10.2017 17:23:08.476341+0100 AimieSmiles[18012:3495056] [] nw_resolver_create_dns_service_locked DNSServiceCreateDelegateConnection failed: ServiceNotRunning< /strong>(-65563) 2017-10-10 17:23:08.476719+0100 AimieSmiles[18012:3495056] TIC TCP Conn Failed [1:0x60c000162dc0]: 10:-72000 Err(-65563)

Если я попытаюсь использовать Alamofire (я просто хотел проверить это как возможность, используя такой код:

func alamoRequest(cas: String) -> String {

        var smilesResult = ""
        var stringURL = "https://cactus.nci.nih.gov/chemical/structure/\(cas)/smiles"
        var url = URL(string: stringURL)!
        Alamofire.request(url).responseString { response in
            print("Request: \(String(describing: response.request))")   // original url request
            print("Response: \(String(describing: response.response))") // http url response
            print("Result: \(response.result)")                         // response serialization result
            print("Error: \(String(describing: response.error))")



            if let result = response.result.value {
                smilesResult = result
                print("Result: \(result)") // serialized json response
            } else if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
                smilesResult = utf8Text
                print("Data: \(utf8Text)") // original server data as UTF8 string
            }
        }

        return smilesResult
    }

Я получаю следующую ошибку:

Запрос: необязательно (https://cactus.nci.nih.gov/chemical/structure/514-10-3/smiles) Ответ: ноль Результат: FAILURE Ошибка: необязательно (Error Domain=NSURLErrorDomain Code=-1003 «Не удалось найти сервер с указанным именем хоста». UserInfo ={NSUnderlyingError=0x60c000450800 {Домен ошибки=kCFErrorDomainCFNetwork Code=-1003 "(null)" UserInfo={_kCFStreamErrorCodeKey=-72000, _kCFStreamErrorDomainKey=10}}, NSErrorFailingURLStringKey=https://cactus.nci.nih.gov/chemical/structure/514-10-3/smiles, NSErrorFailingURLKey =https://cactus.nci.nih.gov/chemical/structure/514-10-3/smiles, _kCFStreamErrorDomainKey=10, _kCFStreamErrorCodeKey=-72000, NSLocalizedDescription=Сервер с указанным именем хоста не найден.})

Судя по ошибкам, URL-адрес недействителен или не распознан приложением macOS? Как ни странно, он отлично работает с игровой площадки...

Я попытался включить параметры безопасности транспорта приложений --> Разрешить произвольные загрузки --> ДА в plist, но это не имело значения.


person gbdavid    schedule 10.10.2017    source источник


Ответы (1)


Проблема оказалась тривиальной: нужно было просто включить App Sandbox и проверить входящие и исходящие сетевые подключения.

person gbdavid    schedule 10.10.2017