2017-10-10 4 views
0

Je suis en train de faire une demande à l'adresse suivanteURLSession ou Alamofire.Request ne fonctionne pas avec des tirets dans l'URL?

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

cette demande devrait simplement retourner un texte brut:

Clc1ccc(C=O)cc1 

Utilisation du code dans un terrain de jeu comme celui-ci fonctionne parfaitement bien :

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

Mais si j'essaie d'utiliser le code dans mon projet macOS (en utilisant Swift 4 et Xcode 9) tar geting 10,13 macOS Je reçois

URL for request is: 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 Operation not permitted 2017-10-10 17:23:08.476341+0100 AimieSmiles[18012:3495056] [] nw_resolver_create_dns_service_locked DNSServiceCreateDelegateConnection failed: ServiceNotRunning(-65563) 2017-10-10 17:23:08.476719+0100 AimieSmiles[18012:3495056] TIC TCP Conn Failed [1:0x60c000162dc0]: 10:-72000 Err(-65563)

Si j'essayer d'utiliser Alamofire (je voulais juste vérifier cette possibilité, en utilisant un code comme celui-ci:

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 
    } 

Je reçois l'erreur suivante:

Request: Optional(https://cactus.nci.nih.gov/chemical/structure/514-10-3/smiles) Response: nil Result: FAILURE Error: Optional(Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo={NSUnderlyingError=0x60c000450800 {Error Domain=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=A server with the specified hostname could not be found.})

Il semble des erreurs que l'URL est pas valide, ou non reconnue d'un macOS App? Bizarrement cela fonctionne très bien d'un terrain de jeu ...

J'ai essayé d'activer les paramètres de sécurité de transport d'application -> Autoriser des charges arbitraires -> OUI dans le plist mais cela n'a pas fait de différence.

Répondre

0

Le problème avéré être trivial: Je avais besoin pour activer App Sandbox et vérifier les connexions réseau entrantes et sortantes.