`
isiqi
  • 浏览: 16072226 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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(RHTTPTransactionaTransaction, 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. TPtrC8dataChunk;
  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. TIntCHTTPTransactionObserver::MHFRunError(TIntaError,RHTTPTransactionaTransaction,const THTTPEvent&aEvent)
  43. {
  44. //................................
  45. //................................
  46. }
  47. TBoolCHTTPAuthentication::GetCredentialsL(const TUriC8&aUri,
  48. RStringaRealm,
  49. RStringFaAuthenticationType,
  50. RString&aUsername,
  51. RString&aPassword)
  52. {
  53. TRAPD(err,aUsername=aRealm.Pool().OpenStingL(KUserName));
  54. if (!err)
  55. {
  56. TRAPD(err,aPassword=aRealm.Pool().OpenStingL(KPassword));
  57. if (!err)
  58. return ETRUE;
  59. }
  60. return EFalse;
  61. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics