在使用Symbian提供的HTTP引擎時發現,在網路返回302跳轉訊息時擷取跳轉的URL為空白(”Location”),這種情況在Series 60 2nd和3rd都存在。要解決這個問題需要首先瞭解一下HTTP引擎本身提供過濾機制(Filter),這種機制可以為實際應用中的各種HTTP訊息響應機制提供支援,通過這個機制可以為HTTP引擎添加/刪除某個過濾器,當然我們也可以實現自己的過濾器。之所以取到的跳轉URL為空白,就是因為HTTP引擎預設情況添加了302跳轉的過濾器,如果程式中需要自己處理的話就需要把這個過濾器從當前的HTTP會話中刪除掉,下面的代碼示範了刪除過濾器的方法:
void CHTTPEngine::ConstructL(){ // Open RHTTPSession with default protocol ("HTTP/TCP") TRAPD(err, iSession.OpenL()); if(err != KErrNone) { // Most common error; no access point configured, and session creation // leaves with KErrNotFound. _LIT(KErrMsg, "Cannot create session. Is internet access point configured?"); _LIT(KExitingApp, "Exiting app."); CEikonEnv::Static()->InfoWinL(KErrMsg, KExitingApp); User::Leave(err); } //Remove the redirect filter. RStringPool pool = iSession.StringPool(); iSession.FilterCollection().RemoveFilter( pool.StringF( HTTP::ERedirect, RHTTPSession::GetTable() ) ); …………………………} 使用上面的方法去掉HTTP會話中的跳轉過濾後就可以正常響應和處理302跳轉了。該代碼在Series 60 2nd和3rd平台上測試通過。