iOS開發ASIHTTPRequest使用代理連接
ASIHTTPRequest檢測系統的proxy設置并自動將proxy用于request。從1.0.6版本開始,它還支持PAC文件和要求授權的proxy。
默認情況下,ASIHTTPRequest將嘗試自動檢測proxy設置。當然,你可以看自己手動設置:
- // 手動設置代理服務器
- NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"];
- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
- [request setProxyHost:@"192.168.0.1"];
- [request setProxyPort:3128];
- // 另一種方法, 使用代理配置腳本文件
- // (***使用本地pac文件)
- [request setPACurl:[NSURL URLWithString:@"path/to/test.pac"]];
要求授權的proxy
在Mac OS上,ASIHTTPRequest可以自動檢測到要求授權的proxy的憑據(前提是在系統設定中設置好)。在iOS上,ASIHTTPRequest則無法自動檢測出授權憑據,所以你要么手動使用delegate來向你的controller或者用戶索取合適的憑據,要么讓ASIAuthenticationDialog向用戶索取憑據。一旦獲得了一個有效的proxy憑據,那么該憑據將被存儲到keychian中(前提是啟用useKeychainPersistence )并自動重用。
手動為proxy指定憑據
- NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"];
- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
- [request setProxyHost:@"192.168.0.1"];
- [request setProxyPort:3128];
- //為要求授權的proxy設置username 和password
- [request setProxyUsername:@"bencopsey"];
- [request setProxyPassword:@"password"];
- // 對于NTLM proxy,還要設置 domain (NTLM proxy功能是未經測試的)
- [request setProxyDomain:@"la.la.land"];
使用delegate來提供proxy憑據
這個特性的工作原理和“使用delegate提供HTTP授權”一樣,只有一點不同:你的delegate要響應proxyAuthenticationNeededForRequest:函數。
使用內建的授權對話框(僅適用于iOS)
這個特性歸功于1.0.8版本的新類ASIAuthenticationDialog 。用來向用戶索取憑據來授權webserver或者proxy。
如果你的delegate不響應proxyAuthenticationNeededForRequest:函數,那么默認情況下,ASIHTTPRequest將會顯示一個對客戶來提示用戶輸入授權憑據。使用ASIHTTPRequest,開發者不再需要寫額外的代碼來顯示授權對話框,因為默認情況下,ASIHTTPRequest就會顯示它。
使用同步request時proxy授權對話框不會顯示出來。
如果你不限使用proxy授權對話框,那么你要么實現proxyAuthenticationNeededForRequest:,要么設置shouldPresentProxyAuthenticationDialog 為false(此時你的程序將無法連接到proxy)。如果你要改變對話框的樣式,你得繼承ASIHTTPRequest類,重寫showProxyAuthenticationDialog 來顯示你自己的對話框或者ASIAuthenticationDialog 子類.