swift2 - Authentication keeps failing with Alamofire -
i migrated project swift 2.0 , got lots of errors. fixed of them, 1 keeps making error.
i calling bing search api using alamofire below , error saying "error domain=nscocoaerrordomain code=3840 "invalid value around character 0." userinfo={nsdebugdescription=invalid value around character 0.}"
i understand means authentication fails. advise me on how fix this?
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 nserror): print(error) default: print("do nothing") } } xcode version 7.0 alamofire version 2.0.2
[update]
i tried urlstr("https://api.datamarket.azure.com/bing/search/news?query=%e4%b8%ad%e5%9b%bd&$top=10&$format=json") web browser. asked me type in user name , password, typed apikey password , kept user name blank following instruction microsoft doc
i got error:parameter: query not of type string
according stackoverflow, because keyword not percented, adding percent keyword string...
it turns out needed single quotation marks search key words.
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 nserror): print(error) default: print("do nothing") } } }
Comments
Post a Comment