2015-09-30 5 views
0

Недавно я перенес свой проект в Swift 2.0 и получил массу ошибок. Я исправил большинство из них, но этот продолжает делать ошибку.Аутентификация продолжает сбой с Alamofire

Я зову Bing Search API с помощью Alamofire, как показано ниже, и я получаю сообщение об ошибке сказав "Error Domain = NSCocoaErrorDomain Code = 3840 "недопустимое значение вокруг символа 0." UserInfo = {NSDebugDescription = Недопустимое значение вокруг символа 0.}"

Я понимаю, это означает, что аутентификация не удалась. Может ли кто-нибудь посоветовать мне, как это исправить?

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

Xcode версии 7.0 Alamofire версия 2.0.2

[Update]

Я попытался urlStr ("https://api.datamarket.azure.com/Bing/Search/News?Query=%E4%B8%AD%E5%9B%BD& $ топ = 10 & $ = формат JSON") веб-браузер. Он попросил меня ввести имя пользователя и пароль, так что я напечатал apiKey в качестве пароля и сохранил имя пользователя пустой, следуя инструкции по Microsoft doc

Я получил эту ошибку: Параметр: Запрос не тип String,

Согласно stackoverflow, это связано с тем, что ключевое слово не имеет процента, но я добавляю проценты к строке ключевого слова ...

+0

Вы должны переключиться на использование 'responseString'. Разбор JSON не работает. – cnoon

+0

У вас также есть пробел между ключевыми словами '?' И 'Query' в строке запроса. – cnoon

+0

Спасибо за ваш совет! Оказывается, мне нужны одинарные кавычки для ключевых слов поиска. Пространство между? и Query, похоже, был создан моим плагином проверки правописания (Ginger). Разбор JSON, похоже, все еще работает. –

ответ

1

Оказывается, мне нужны одинарные кавычки для ключевых слов поиска.

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") 
       } 
     } 
    } 
Смежные вопросы