symbian下的http连接

使用到的类:

RHTTPTransaction  :
http处理类。包括请求和应答。通过RHTTPSession::OpenTransactionL()创建并打开。


RSocketServ :
socket服务器类。RSocketServ::connect()用来建立客户端到socket服务器的进程之间的通信。

RConnection :
网络连接管理接口类。

RHTTPSession:
HTTP会话类。

RStringPool:  
字符串池类。存放HTTP字符串表,包括:方法名字,包头名字等等。

RHTTPConnectionInfo:  
HTTP连接类。用于设置和获得HTTP的一些属性值。


MHTTPTransactionCallback:
观察器类,类似于CBrCtlInterface观察器MBrCtlLoadEventObserver
回调函数MHFRunL:
void MHFRunL( RHTTPTransaction aTransaction,  const THTTPEvent& aEvent )

回调函数MHFRunError:
TInt MHFRunError( TInt aError,  RHTTPTransaction aTransaction,  const THTTPEvent& aEvent );
使用时,继承该类并实现其回调函数,在回调函数MHFRunL中实现对HTTP 处理中各个事件的操作。
在回调函数MHFRunL中实现对传输出错的处理。
使用RHTTPSession::OpenTransactionL()将自身设置为RHTTPSession对象的观察器,当发生各种传输事件或传输出错时,会自动调用回调函数。


MHTTPAuthenticationCallback:
观察器类,用于需要身份认证(authentication)的http请求。

内联函数InstallAuthenticationL:
void InstallAuthenticationL(RHTTPSession aSession)
用于将自身设置为aSession得回调函数。传入的实参必须是一个已经OpenL()的RHTTPSession。

回调函数GetCredentialsL:
TBool GetCredentialsL(const TUriC8& aURI, RString aRealm, RStringF aAuthenticationType,
     RString& aUsername, RString& aPassword)
使用时,继承该类并实现其回调函数,在该回调函数中将用户名和密码传入回调函数参数。
通过内联函数设置自身为RHTTPSession对象的观察器,当http请求需要authentication时候,会自动调用回调函数。


其他相关类:RHTTPResponse  RHTTPHeaders THTTPHdrFieldIter

HTTP请求及连接步骤:

1.创建会话
iSession.OpenL()
iHTTPAuthenticationObserver->InstallAuthenticationL( iSession );


2.如果存在已建立的transaction。关闭transaction。
iTransaction.Close();

3.创建并打开与socket服务器的连接
iSocketServ.Connect()
iConnection.Open(iSocketServ)
iConnection.Start()

4.设置HTTP连接
iSession.ConnectionInfo().SetPropertyL ( iSession.StringPool().StringF(HTTP::EHttpSocketServ, RHTTPSession::GetTable() ), THTTPHdrVal (iSocketServ.Handle()) )
iSession.ConnectionInfo().SetPropertyL ( iSession.StringPool().StringF(HTTP::EHttpSocketConnection, RHTTPSession::GetTable() ), THTTPHdrVal (REINTERPRET_CAST(TInt, &(iConnection))));

5.打开传输
TUriParser8 uri;
uri.Parse( aUri );
RStringF method = iSession.StringPool().StringF( HTTP::EGET, RHTTPSession::GetTable());
iTransaction = iSession.OpenTransactionL( uri, *iHTTPTransactionObserver, method );

6.设置请求包头
RStringF valStr = iSession.StringPool().OpenFStringL( KUserAgent);
THTTPHdrVal val( valStr );
RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
hdr.SetFieldL( iSession.StringPool().StringF( HTTP::EUserAgent, RHTTPSession::GetTable() ), val );

RStringF valStr = iSession.StringPool().OpenFStringL( KAccept );
THTTPHdrVal val( valStr );
RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
hdr.SetFieldL( iSession.StringPool().StringF( HTTP::EAccept,  RHTTPSession::GetTable() ), val );

7.提交传输
iTransaction.SubmitL();

8.HTTP连接的关闭:
iTransaction.Close();

两个观察器的实现:

  1. void  CHTTPTransactionObserver::MHFRunL( RHTTPTransaction aTransaction,  const  THTTPEvent& aEvent )  
  2.     {  
  3.     switch  ( aEvent.iStatus )   
  4.         {  
  5.         case  THTTPEvent::EGotResponseHeaders:  
  6.             {  
  7.             //................................   
  8.             //................................   
  9.             break ;  
  10.             }  
  11.         case  THTTPEvent::EGotResponseBodyData:  
  12.             {  
  13.             //................................   
  14.             //................................   
  15.             TPtrC8 dataChunk;  
  16.             aTransaction.Response().Body()->GetNextDataPart( dataChunk );  
  17.             body->ReleaseData();       
  18.             break ;  
  19.             }  
  20.         case  THTTPEvent::ESucceeded:  
  21.             {  
  22.             //................................   
  23.             //................................   
  24.             aTransaction.Close();         
  25.             break ;  
  26.             }  
  27.          case  THTTPEvent::EFailed:  
  28.             {  
  29.             //................................   
  30.             //................................   
  31.             aTransaction.Close();         
  32.             break ;  
  33.             }  
  34.         default :  
  35.             {  
  36.             //................................   
  37.             //................................   
  38.             break ;  
  39.             }  
  40.         }  
  41.    
  42.     }  
  43.     
  44.     
  45. TInt CHTTPTransactionObserver::MHFRunError( TInt aError, RHTTPTransaction aTransaction, const  THTTPEvent& aEvent)  
  46.     {                            
  47.     //................................   
  48.     //................................    
  49.     }  
  50.                                       
  51.                                       
  52. TBool CHTTPAuthentication::GetCredentialsL( const  TUriC8& aUri,  
  53.                                                RString aRealm,   
  54.                                                RStringF aAuthenticationType,  
  55.                                                RString& aUsername,   
  56.                                                RString& aPassword)   
  57.     {          
  58.     TRAPD(err, aUsername = aRealm.Pool().OpenStingL( KUserName));  
  59.     if ( !err )  
  60.         {  
  61.         TRAPD( err, aPassword = aRealm.Pool().OpenStingL( KPassword ) );  
  62.         if ( !err )  
  63.         return  ETRUE;  
  64.         }  
  65.     return  EFalse;  
  66.     } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值