2015-09-30 2 views
0

J'ai récemment migré mon projet vers Swift 2.0 et j'ai eu beaucoup d'erreurs. J'ai corrigé la plupart d'entre eux, mais celui-ci continue à faire une erreur.L'authentification continue à échouer avec Alamofire

J'appelle Bing API de recherche en utilisant Alamofire comme ci-dessous et je reçois une erreur « Erreur de domaine = code NSCocoaErrorDomain = 3840 « valeur non valide dans le caractère 0. » UserInfo = {NSDebugDescription = valeur non valide dans le caractère 0.} »

Je comprends que cela signifie que l'authentification échoue. Quelqu'un pourrait-il me conseiller sur la façon de résoudre ce problème?

let percentedKeyword = searchKey.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 
Let ulrStr: String = "https://api.datamarket.azure.com/Bing/Search/v1/News" + "? Query=" + percentedKeyword! + "&$top=10&$format=JSON" 
let credentials = ":\(bingApiKey)" 
let plainText = credentials.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 
let base64 = plainText!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 

let headers = ["Authorization": "Basic \(base64)"] 

Alamofire.request(.GET, urlStr, headers: headers) 
    .responseJSON { request, response, data in 
     switch data { 
     case Result.Success(let receivedValue): 
      self.bingJson = JSON(receivedValue) 
     case Result.Failure(_, let error as NSError): 
      print(error) 
     default: 
      print("do nothing") 
     } 
} 

version Xcode 7.0 Alamofire version 2.0.2

[Mise à jour]

J'ai essayé urlStr ("https://api.datamarket.azure.com/Bing/Search/News?Query=%E4%B8%AD%E5%9B%BD& top $ = 10 & $ format = JSON") le navigateur Web. Il m'a demandé de taper le nom d'utilisateur et mot de passe, donc je dactylographiées apiKey comme mot de passe et a gardé le nom d'utilisateur vide suivant les instructions de Microsoft doc

Je suis cette erreur: Paramètre: requête n'est pas de type String

Selon stackoverflow, c'est parce que le mot-clé n'est pas pour cent, mais j'ajoute le pourcentage au mot-clé chaîne ...

+0

Vous devez basculer pour utiliser 'responseString'. L'analyse JSON échoue. – cnoon

+0

Vous avez également un espace entre vos mots clés '?' Et 'Query' dans la chaîne de requête. – cnoon

+0

Merci pour vos conseils! Il s'avère que j'avais besoin de guillemets simples pour les mots clés de recherche. L'espace entre? et Query semble avoir été créé par mon plug-in de vérification orthographique (Ginger). L'analyse syntaxique JSON semble toujours fonctionner. –

Répondre

1

Il s'est avéré que j'avais besoin de guillemets simples pour les mots clés de recherche.

let percentedKeyword = searchKey.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 
     let urlStr: String = "https://api.datamarket.azure.com/Bing/Search/News" + "?Query=" + "'" + percentedKeyword! + "'" + "&$top=10&$format=JSON" 
     let credentials = ":\(bingApiKey)" 
     let plainText = credentials.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 
     let base64 = plainText!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 

     let headers = ["Authorization": "Basic \(base64)"] 

     Alamofire.request(.GET, urlStr, headers: headers) 
      .responseJSON { request, response, data in 
       switch data { 
       case Result.Success(let receivedValue): 
        self.bingJson = JSON(receivedValue) 
       case Result.Failure(_, let error as NSError): 
        print(error) 
       default: 
        print("do nothing") 
       } 
     } 
    }