NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setUsername:@"username"]; [request setPassword:@"password"];
若是打開了keychainPersistence,全部提供的可用的用戶名和密碼將被存儲到keychain中,之後的request將會重用這些用戶名密碼,即便你關閉程序後從新打開也不影響。 web
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setUseKeychainPersistence:YES]; [request setUsername:@"username"]; [request setPassword:@"password"];
若是你使用keychain可是想要本身管理它,你能夠在ASIHTTPRequest.h文件裏找到相關的類方法。 安全
若是打開了useSessionPersistence(默認便是如此),ASIHTTPRequest會把憑據存儲到內存中,後來的request將會重用這些憑據。 服務器
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setUsername:@"username"]; [request setPassword:@"password"]; [request setUseSessionPersistence:YES]; //這一項是默認的,因此並沒必要要 //將會重用咱們的 username 和 password request = [ASIHTTPRequest requestWithURL:url];
要使用NTLM受權的Windows服務器,你還須要指定你要進行受權域。 session
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setUsername:@"username"]; [request setPassword:@"password"]; [request setDomain:@"my-domain"];
你不必定非要提早指定受權憑據,你還可讓每一個request在沒法從session或keychain中找到憑據時向它們的代理請求憑據。若是你要鏈接到一個你並不清楚受權類型的服務器時,這是頗有用的。 app
你的delegate必須實現authenticationNeededForRequest:方法,當request等待憑據時,ASIHTTPRequest將會暫停這個request。若是你持有你須要的憑據,那麼先爲request設定憑據,而後調用[request retryUsingSuppliedCredentials]便可。若是你想取消受權,調用[request cancelAuthentication],此時,這個request也會被取消。 dom
從1.0.8版開始,一次只能有一個request的delegate收到authenticationNeededForRequest: 或者 proxyAuthenticationNeededForRequest:。當delegate處理第一個request時,其餘須要受權的request將會被暫停。若是提供了一個憑據,當前進程中全部其餘的request將會假定這個憑據對這個URL有效,並嘗試重用這個憑據。若是delegate取消了受權,而且隊列的shouldCancelAllRequestsOnFailure值爲YES,全部其餘的request都將被取消(它們也不會嘗試請求憑據)。 函數
當進行同步請求時,你不可使用代理模式來受權。 url
在較老的版本中,這麼作會致使程序假死,從1.0.8開始,即便你這麼作了,代理函數也不會被調用。 代理
這個特性歸功於1.0.8版本的新類ASIAuthenticationDialog 。這個特性主要是用於受權代理(後面會介紹到),可是它也能夠用來向用戶取得受權憑據。 code
爲了更好的用戶體驗,大多數(鏈接單一服務的)app必須爲request的delegate實現authenticationNeededForRequest:方法,或者避免同時使用代理式受權。
most apps that connect to a single service should implement authenticationNeededForRequest: in their request delegates, or avoid the use of delegation-style authentication altogether.
可是,會有一些狀況下,爲普通的受權使用ASIHTTPRequest的標準受權對話框更好:
對於這些狀況,爲request設置shouldPresentAuthenticationDialog爲YES,此時,若是你的代理沒有實現
authenticationNeededForRequest:方法,那麼用戶將會看到這個對話框。
一次同時只有一個對話框能夠顯示出來,因此當一個對話框顯示時,全部其餘須要受權的request將會暫停。若是提供了一個憑據,當前進程中全部其餘的request將會假定這個憑據對這個URL有效,並嘗試重用這個憑據。若是delegate取消了受權,而且隊列的shouldCancelAllRequestsOnFailure值爲YES,全部其餘的request都將被取消(它們也不會嘗試請求憑據)。
對於同步請求的request,受權對話框不會顯示出來。
這個對話框部分模仿了iPhone上Safari使用的受權對話框,它包含如下內容:
若是你想改變它的外觀,你必須繼承ASIHTTPRequest,並重寫showAuthenticationDialog來顯示你本身的對話框或ASIAuthenticationDialog子類。
IMPORTANT
從1.8.1開始,使用基本受權模式的request時,這個特性的行爲改變了。你可能須要修改你的代碼。
在第一次生成request時,ASIHTTPRequest能夠先向服務器發送憑據(若是有的話),而不是等服務器要求提供憑據時才提供憑據。這個特性能夠提升使用受權的程序的執行效率,由於這個特性避免了多餘的request。
對於基本受權模式,要觸發這個行爲,你必須手動設置request的authenticationScheme爲kCFHTTPAuthenticationSchemeBasic:
[request setAuthenticationScheme:(NSString *)kCFHTTPAuthenticationSchemeBasic];
對於其餘受權方案,憑據也能夠在服務器要求以前被髮送,可是僅當有另外一個request成功受權以後才行。
在如下狀況下,你也許想要禁用這個特性:
要禁用這個特性,這樣作:
[request setShouldPresentCredentialsBeforeChallenge:NO];