伙计们,我来了,cmwap 问题啊
研究了两天了,总是搞不定这个cmwap联网问题
我就是想用sdk自带http的例子,访问 www.baidu.com 这个网页。接入点什么的都设置好了。
我先说下这个cmwap访问www.baidu.com 网页的整个流程,不知道我的理解对不对,不对一定要纠正我。
iTransaction = iSession.OpenTransactionL(uri, *this, method);
RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
SetHeaderL(hdr, HTTP::EUserAgent, KUserAgent);
SetHeaderL(hdr, HTTP::EAccept, KAccept);
//如果走cmwap 那么需要加入下面这个头
AddHeaderExL(hdr,KCmwapXOnlineHost, KRealUrl);
// Submit the transaction. After this the framework will give transaction
// events via MHFRunL and MHFRunError.
iTransaction.SubmitL();
----------------------------------------------
其中
_LIT8(KCmwapXOnlineHost, "X-Online-Host: ");
_LIT8(KRealUrl, "202.108.22.5"); //www.baidu.com IP
void CClientEngine::AddHeaderExL(RHTTPHeaders aHeaders, const TDesC8 &aHeaderField, const TDesC8 &aHeaderValue)
{
RStringPool stringPool = iSession.StringPool();
RStringF valStr = stringPool.OpenFStringL(aHeaderValue);
THTTPHdrVal headerVal(valStr);
RStringF sHeaderField = stringPool.OpenFStringL(aHeaderField);
aHeaders.SetFieldL(sHeaderField, headerVal);
valStr.Close();
sHeaderField.Close();
}
---------------------------------------------------
好了,大家一定熟悉上面的代码,sdk自带的。
iTransaction = iSession.OpenTransactionL(uri, *this, method);
上面这句,如果我们用cmnet来进行http的访问,那么这个uri就是 www.baidu.com 。
但现在我们要用cmwap来访问,这个uri是不是 10.0.0.172 .因为在我的理解,cmwap就是一个代理,通过访问 10.0.0.172 这个IP来进行代理操作。(这句是不是正确的?)
我们再来看这句 AddHeaderExL(hdr,KCmwapXOnlineHost, KRealUrl);
这句上面有注释:就是如果用cmwap来进行网络连接,那么加上这句。这个函数来自网上的一个博客。也就是说我们真正要访问的网页 www.baidu.com 要放到 KRealUrl 中。
程序执行之后返回了400错误 ,返回的文本如下:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><card><p><do type="prev" name="Back" label="Back"><prev/></do>Malformed URL</p></card></wml>
里面有一个 Malformed URL 估计应该是提交的头不正确。
我还进行了直接对 10.0.0.172 这个IP的访问,当然是用cmwap,返回的是下面文本:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><card><p><do type="prev" name="Back" label="Back"><prev/></do>Not an error. You should not be seeing this message.</p></card></wml>
对比两个文本,Malformed URL 应该是提交的头不正确,哪位有过这方便的经验啊,如果你用socket来模拟http链接,那么希望你也写一下提交的GET 请求字符串。
谢谢大家,谢谢啦。