`
isiqi
  • 浏览: 16483015 次
  • 性别: 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. }
分享到:
评论

相关推荐

    symbian http连接例子

    在Symbian操作系统上开发应用程序时,HTTP连接是常见的需求,尤其在构建网络通信功能时。"Symbian HTTP连接例子"是一个针对Symbian S60平台的示例项目,它展示了如何使用S60 Platform HTTP Client API来实现HTTP连接...

    HTTP 引擎 实现 例子 Symbian HTTP引擎 HTTP例子

    在IT行业中,网络通信是至关重要的,而HTTP(超文本传输协议)作为互联网上应用最为广泛...通过对这些文件的详细分析和学习,开发者可以更好地理解和掌握Symbian系统下的网络编程,为构建自己的网络应用打下坚实基础。

    symbian http通讯

    在这个场景中,我们看到一个标题为“symbian http通讯”,描述中提到通过HTTP连接到百度MP3服务,下载音乐到本地设备,并在屏幕上展示新歌的前10名。这涉及到多个技术点,我们将详细讨论这些知识点。 1. **HTTP协议...

    Qt Creator连接Symbian手机所需的trk文件

    这是Qt Creator连接Symbian手机所需的trk文件,有好几个版本,具体参考: http://blog.csdn.net/htttw/article/details/7632122 Nokia 5230的版本是s60_5_0_app_trk_3_2_7.sisx

    SYMBIAN HTTP引擎

    HTTP引擎的设计和实现对于Symbian平台上的应用程序,特别是那些需要网络连接的应用程序(如浏览器、邮件客户端等),至关重要。 在Symbian系统中,HTTP通信通常基于其C++类库,这包括了`HTTPEngine.cpp`和`...

    Symbian s60 http客户端源码例子

    2. **网络编程接口**:Symbian提供了一系列网络编程接口,如RSocketServ类用于管理套接字服务,RSocket类则用于实际的网络连接。在S60平台上,HTTP请求通常通过TCP/IP套接字进行。 3. **HTTP请求构造**:HTTP请求由...

    塞班入门书籍+培训讲义

    1. **环境配置**:讲解如何安装Symbian SDK,设置Eclipse或 Carbide.c++等开发工具,以及如何配置模拟器或连接真实设备进行测试。 2. **基础概念**:介绍Symbian的文件系统、进程与线程模型、内存管理机制,以及...

    symbian http实现

    总的来说,Symbian的HTTP实现涉及网络会话的创建、HTTP连接的建立、请求与响应的处理等多个环节,每个环节都需要精确的操作和有效的错误处理。理解和掌握这些知识点,对于在Symbian系统上开发网络应用至关重要。

    symbian_sample.rar_DEMO_塞班

    3. **网络通信**:塞班系统支持TCP/IP协议栈,DEMO可能展示如何进行HTTP请求、数据传输和网络连接管理。 4. **设备访问**:塞班系统允许访问硬件资源,如GPS、蓝牙、摄像头等。DEMO可能包含如何读取和操作这些设备...

    symbian平台http多线程下载

    在Symbian上,我们需要创建多个线程,每个线程负责一个独立的HTTP连接。这样可以充分利用网络带宽,减少整体下载时间。 4. **文件分块**: 在多线程下载中,大文件会被分割成多个小块,每个线程负责下载其中一块。...

    百度地图塞班版离线地图安装说明

    离线地图功能是百度地图塞班版的一大亮点,它允许用户在没有网络连接的情况下仍能访问地图数据,这对于网络信号不稳定或出国旅行时非常实用。以下是对百度地图塞班版离线地图安装流程的详细解析与操作指南。 ### ...

    symbian http server

    **Symbian HTTP Server 框架详解** 在移动设备领域,Symbian操作系统曾经是主导力量之一,尤其是在智能手机市场。对于开发人员来说,构建在Symbian平台上的应用程序和服务至关重要,而Symbian HTTP Server就是这样...

    HTTP.rar_HTTP_c http_symbian ht

    总结,这个压缩包提供了学习和理解HTTP协议的基础材料,包括HTTP的基本概念、请求响应机制、常见方法、HTTP/1.1与HTTP/2的区别以及在Symbian系统中的应用。通过分析www.pudn.com.txt和HTTP这两个文件,我们可以深入...

    symbian下运行的天气播报

    1. **网络通信**:应用需要连接到互联网,通常是通过HTTP或HTTPS协议与天气预报服务器交互,获取XML或JSON格式的天气数据。开发者需要理解和使用Symbian的网络编程接口,如RSocket或RHTTPProtocol组件。 2. **数据...

    Qt Symbian例子

    Qt for Symbian是Nokia推出的一个用于开发Symbian平台应用程序的框架,它结合了Qt的跨平台特性和Symbian的操作系统优势,为开发者提供了丰富的API和工具集,以便在S60设备上创建功能强大的用户界面和应用程序。...

    symbian Http编程

    HTTP协议是基于TCP/IP协议栈的,所以我们在建立HTTP连接时,实际上是在创建一个TCP套接字。 在HTTP客户端编程中,你需要完成以下几个关键步骤: 1. **初始化网络环境**:使用`CEikonEnv::Static()`获取Eikon环境,...

    symbian http上传例子

    在Symbian中,我们可以使用`RHTTPSession`类来建立与服务器的连接,并通过`RHTTPRequestEntity`类构造请求。以下是一个基本的上传流程: 1. 初始化`RHTTPSession`:创建一个`RHTTPSession`对象,设置服务器的URL、...

    symbian系统开发教程

    Symbian系统支持GPRS、EDGE、3G等多种网络连接方式,开发者可以利用Symbian的API实现数据传输、HTTP请求、电子邮件等功能。 ### 7. 本地化和国际化 由于Symbian系统全球范围内广泛使用,所以本地化和国际化是重要的...

    symbian学习笔记(超级经典-适用于初学者)

    Symbian以其高效、安全和可扩展性而闻名,支持多种网络连接方式,如GSM、GPRS、EDGE、3G等,同时提供了丰富的API接口供开发者进行应用开发。 二、Symbian系统架构 Symbian操作系统采用微内核设计,包含四个主要组件...

    Symbian OS End-to-End HTTP API Example

    本篇文章将详细介绍Symbian OS中端到端的HTTP API应用实例,帮助开发者更好地理解和掌握Symbian系统下的网络编程。 一、Symbian OS 网络通信基础 Symbian OS 提供了丰富的网络功能,其中包括TCP/IP协议栈和HTTP...

Global site tag (gtag.js) - Google Analytics