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.