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();
两个观察器的实现:
view plaincopy to clipboardprint?
void CHTTPTransactionObserver::MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent )
{
switch ( aEvent.iStatus )
{
case THTTPEvent::EGotResponseHeaders:
{
//................................
//................................
break;
}
case THTTPEvent::EGotResponseBodyData:
{
//................................
//................................
TPtrC8 dataChunk;
aTransaction.Response().Body()->GetNextDataPart( dataChunk );
body->ReleaseData();
break;
}
case THTTPEvent::ESucceeded:
{
//................................
//................................
aTransaction.Close();
break;
}
case THTTPEvent::EFailed:
{
//................................
//................................
aTransaction.Close();
break;
}
default:
{
//................................
//................................
break;
}
}
}
TInt CHTTPTransactionObserver::MHFRunError( TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
{
//................................
//................................
}
TBool CHTTPAuthentication::GetCredentialsL( const TUriC8& aUri,
RString aRealm,
RStringF aAuthenticationType,
RString& aUsername,
RString& aPassword)
{
TRAPD(err, aUsername = aRealm.Pool().OpenStingL( KUserName));
if( !err )
{
TRAPD( err, aPassword = aRealm.Pool().OpenStingL( KPassword ) );
if( !err )
return ETRUE;
}
return EFalse;
}
symbian下的http连接相关推荐
- windows7 telnet linux,Windows下通过Telnet连接linux
<Windows下通过Telnet连接linux>由会员分享,可在线阅读,更多相关<Windows下通过Telnet连接linux(1页珍藏版)>请在人人文库网上搜索. 1.W ...
- Win8.1下Node.js连接oracle
2019独角兽企业重金招聘Python工程师标准>>> Win8.1下Node.js连接oracle 1. 安装oracle(10g.11g). 2. 安装microsoft vis ...
- freebsd php 编译 mysql sql2005_问下:Freebsd下用php连接ms sql server
你的位置: 问答吧 -> PHP -> 问题详情 问下:Freebsd下用php连接ms sql server 大家都怎么连接的,,,效率如何? 作者: james.liu 发布时间: 2 ...
- 连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
所谓最坏情况下最优连接(Worst-Case Optimal Joins),是一项关于数据库中连接操作的最新技术.给定若干表{R1, R2, ..., Rn},在它们之上的多表连接所能得到结果的数量上 ...
- CentOS下与Apache连接的PHP多版本共存方案实现详解
这篇文章主要介绍了CentOS下与Apache连接的PHP多版本共存方案实现,针对mod_fcgi模块的配置作了一些说明,需要的朋友可以参考下 在apache下整合fastCGI模式运行的php-fp ...
- HDFS HA模式下支持只连接其中Active的NameNode
HDFS HA模式下支持只连接其中Active的NameNode:
- iptables下开放ftp连接端口
iptables下开放ftp连接端口 转载 2014年04月19日 10:04:27 2275 iptables 就是linux系统的防火墙,很多人安装iptables之后重启服务器发现网站无法访问, ...
- linux下php远程连接mysql_Linux下PHP远程连接Oracle数据库 | 系统运维
说明: Web服务器环境:CentOS 5.8 32位+Nginx 1.2.3+Mysql 5.5.27+php 5.3.16 Web服务器IP:192.168.21.149 php源码编译目录:/u ...
- 计算机连接拒绝访问,Win10系统下Windows无法连接到打印机,拒绝访问的解决办法...
我们在办公的时候,经常会使用打印机共享的功能,近期有一位Win10用户在共享打印机的时候,系统提示了"Windows无法连接到打印机,拒绝访问"的错误.原因是用户和组没有every ...
最新文章
- 联想计算机无线网络设置密码,联想路由器怎么设置密码
- MIT-THU未来城市创新网络即将和你见面!
- 白盒测试工具 - sonar报告常见示例分析,sonar代码质量问题分析演示
- Netty 和 RPC 框架线程模型分析
- deepin v20.1折腾美化之Plank dock任务栏安装
- error:cannot load driver JL2CM3.dll
- Java入门算法(数据结构篇)丨蓄力计划
- 南京铁道学院计算机应用,南京铁道职业技术学院交通运营管理专业怎么样
- H.264视频编码在VC++.Net中的实现
- android 部分区域点击,Android编程实现ListView中item部分区域添加点击事件功能
- c语言作业统计字符,C语言统计字符数(示例代码)
- Android架构MVC,MVP与MVVM及MVPVM对比分析
- winfrom实现,斑马Gk888t打印机,连续打印二维码
- 【POJ 3580】 SuperMemo
- 通过内容关键词查找文件
- MATLAB小技巧整理-那些你必须得知道的matlab技巧
- SpinalNet: Deep Neural Network with Gradual Input
- (私人收藏)蓝色抽象科技感工作计划PPT模板
- 树莓派3B+安装wiringpi和bcm库
- 教你怎么使用Python对word文档进行操作