2014-03-25 30 views
0

我正嘗試使用來自iPhone應用程序的NSURLRequest向HTTP RESTful站點進行身份驗證。我把base64編碼的用戶/密碼傳遞給NSURLRequest中的「授權」頭,並在其後面加上「Basic」一詞。但是,我不斷收到身份驗證錯誤的另一端。這是我的代碼。如果我執行手動CURL請求,它就會起作用。我也檢查過,以確保Base64編碼正確,用戶,傳遞和URL正確。使用HTTP身份驗證的NSURL請求

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; 
NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", user, pass]; 
NSString *authValue = [NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)]; 
authValue = [authValue stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
[urlRequest setValue:authValue forHTTPHeaderField:@"Authorization"]; 
[urlRequest setHTTPMethod: @"GET"]; 
NSData *httpData = [self encodeDictionary:data]; 
[urlRequest setHTTPBody:httpData]; 
NSHTTPURLResponse *response; 
NSError *error; 
NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 
+0

同步請求的任何原因,而不是異步? – klcjr89

+0

爲什麼你有這條線 - authValue = [authValue stringByReplacingOccurrencesOfString:@「\ n」withString:@「」];其他一切似乎都好。 – Kedar

+0

它看起來像我忘了URL中的斜槓。感謝您的回答,併爲此感到遺憾。同步的原因是這是其他ViewControllers調用的共享方法(這是在AppDelegate中)。 – user4819

回答

1

驗證碼看起來不錯。當然,stringByReplacingOccurrencesOfString是不必要的,但不會傷害。我可能會使用原生的base64方法(NSData方法base64EncodedDataWithOptionsbase64EncodedStringWithOptions在iOS 7,base64Encoding iOS之前的7)而不是AFNetworking的,但我不認爲這是問題。

假設你的用戶名和密碼是正確的,你的服務器確實是使用基本身份驗證(我假設是正確的,如果你的捲曲成功),這顯然是不正確這裏的唯一一件事就是setHTTPBody呼籲一個GET要求。 NSURLConnection將不會發送請求的GET請求的身體(也不應該,因爲GET請求中的身體在語義上沒有意義)。如果你想發送請求與身體,你通常應該使用POST。或者,如果您想要發送GET請求中的參數,則可以將它們添加到URL中,但不能添加到主體中。

+0

我想出了錯誤(它在URL中),但在使用POST和GET時,我會記住HTTP正文。謝謝! – user4819