我處於需要將身份驗證(基本HTTP身份驗證)發送到服務器但服務器不首先向我發送質詢的情況。這已被追查成wget開關 - auth-no-challenge的副本。我的問題是,我沒有看到任何方式讓NSURL來做到這一點。NSURL當服務器沒有提出質詢時的身份驗證
我已經在我的NSURLConnection委託中實現了基本認證,但-connection: didReceiveAuthenticationChallenge:
方法沒有被調用。
有什麼辦法強制這個電話或嵌入認證信息這種奇怪的情況?
我處於需要將身份驗證(基本HTTP身份驗證)發送到服務器但服務器不首先向我發送質詢的情況。這已被追查成wget開關 - auth-no-challenge的副本。我的問題是,我沒有看到任何方式讓NSURL來做到這一點。NSURL當服務器沒有提出質詢時的身份驗證
我已經在我的NSURLConnection委託中實現了基本認證,但-connection: didReceiveAuthenticationChallenge:
方法沒有被調用。
有什麼辦法強制這個電話或嵌入認證信息這種奇怪的情況?
您可以將其添加到像這樣的請求頭手動添加授權信息請求:
NSString *authString = [[[NSString stringWithFormat:@"%@:%@",user, password] dataUsingEncoding:NSUTF8StringEncoding] base64Encoding];
[request setValue:[NSString stringWithFormat:@"Basic %@", authString] forHTTPHeaderField:@"Authorization"];
請求是你的NSMutableURLRequest和用戶名/密碼是你的用戶名和密碼NSString的
我一直在使用這種方法與iPhone的API,其中額外的挑戰不是由服務器啓動。
考慮轉義用戶名和密碼。他們都不應該f.e.包含一個'@'字符。 – SimonSimCity 2016-01-05 15:18:47
剛剛偶然發現了這篇文章,雖然已經過了幾年,但我只是在iOS7中爲我的應用使用內置的base64編碼實現了這個功能,而沒有任何第三方庫。
這是值得的;
NSString *credentials = [NSString stringWithFormat:@"%@:%@", username, password];
NSData* credentialsData = [NSData dataWithBytes:[credentials UTF8String] length:strlen([credentials UTF8String])];
credentials = [credentialsData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSString *authStr = [NSString stringWithFormat:@"Basic %@", credentials];
[urlRequest setValue:authStr forHTTPHeaderField:@"Authorization"];
我得到一個錯誤,當我想使用你的解決方案時:NSData不響應base64Encoding「你有沒有自己添加這個方法? – 2010-05-08 12:14:35
在這個答案中找到NSDataAdditions,包括base64Encoding:http://stackoverflow.com/questions/1417893/encrypted-nsdata-to-nsstring-in-obj -c/1417947#1417947 – 2010-05-08 12:20:11
Hi Tim,是的我一直在使用colloquy項目中的NSDataAdditions – paulthenerd 2010-05-09 21:09:30