客户端通过代理服务器(CMWap)遇到的问题移动的 如果客户端对标准的http头的某个域进行赋值可能是徒劳无功的,移动会重新对标准的头进行默认的处理,当然,每个域有固定的域值范围,选一个标准的值是没问题的。扩展自定义的域是可以的。 估计这么做的出发点是安全方面的吧 联通的 先说几个http错误吧: 400:去掉“HTTP::EHost”设置就没问题了。 500:服务器没有找到请求资源 302:加上“HTTP::EContentType” 最后进过几天的折磨终于搞定了,联通的和移动的都可以了! post头: _LIT8( KContentText, "text/plain");//上传字符串用 _LIT8( KContentText,"multipart/form-data");//上传文件用,例如jsp _LIT8( KUserAgentSimpleClient, "SimpleClient 1.0" ); _LIT8( KHttpVersion11,"HTTP/1.1" ); _LIT8( KAccept,"Accept"); _LIT8(KUserAgent, "LARK/1.3.0"); RStringF method = iSession.StringPool().StringF( HTTP::EPOST,RHTTPSession::GetTable()); iTransaction = iSession.OpenTransactionL( uri, *this, method ); RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection(); SetHeaderL( hdr, HTTP::EUserAgent, KUserAgentSimpleClient ); SetHeaderL( hdr, HTTP::EContentType, KContentText); SetHeaderL( hdr, HTTP::EHTTPVersion, KHttpVersion11); SetHeaderL( hdr, _L8("Proxy-Connection"), _L8("Keep-Alive") ); SetHeaderL( hdr, _L8("AcceptType"), _L8("REGISTER") );//扩展自定义http头域 get: SetHeaderL(hdr, HTTP::EUserAgent, KUserAgent); SetHeaderL(hdr, HTTP::EAccept, KAccept); SetHeaderL( hdr, _L8("Proxy-Connection"), _L8("Keep-Alive") ); 下面是头域有关的方法: void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue)//设置标准httpheader { RStringF valStr = iSession.StringPool().OpenFStringL(aHdrValue); CleanupClosePushL(valStr); THTTPHdrVal val(valStr); aHeaders.SetFieldL(iSession.StringPool().StringF(aHdrField, RHTTPSession::GetTable()), val); CleanupStack::PopAndDestroy(); // valStr } void SetHeaderL(RHTTPHeaders aHeaders,const TDesC8& aHdrField, const TDesC8& aHdrValue)//设置非标准httpheader { TInt leaveValue; RStringF contTypeStr; RStringF contTypeStrfield; TRAP(leaveValue, contTypeStr = iSession.StringPool().OpenFStringL(aHdrValue)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("SetNewHeader() : StringPool().OpenFStringL() aHdrValue. TRAP")); } TRAP(leaveValue, contTypeStrfield = iSession.StringPool().OpenFStringL(aHdrField)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("SetNewHeader() : StringPool().OpenFStringL() aHdrField. TRAP")); } THTTPHdrVal contType(contTypeStr); TRAP(leaveValue, aHeaders.SetFieldL(contTypeStrfield,contType)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("SetNewHeader() : StringPool().SetFieldL() TRAP")); } contTypeStr.Close(); contTypeStrfield.Close(); } void SetHeaderL(TInt aHdrField,const TDesC8& aHdrValue)//设置标准httpheader { RStringF valStr = iSession.StringPool().OpenFStringL(aHdrValue); CleanupClosePushL(valStr); THTTPHdrVal val(valStr); iTransaction.Request().GetHeaderCollection().SetFieldL(iSession.StringPool().StringF(aHdrField, RHTTPSession::GetTable()), val); CleanupStack::PopAndDestroy(); // valStr } void SetHeaderL(const TDesC8& aHdrField, const TDesC8& aHdrValue)//设置非标准httpheader { TInt leaveValue; RStringF contTypeStr; RStringF contTypeStrfield; TRAP(leaveValue, contTypeStr = iSession.StringPool().OpenFStringL(aHdrValue)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("SetNewHeader() : StringPool().OpenFStringL() aHdrValue. TRAP")); } TRAP(leaveValue, contTypeStrfield = iSession.StringPool().OpenFStringL(aHdrField)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("SetNewHeader() : StringPool().OpenFStringL() aHdrField. TRAP")); } THTTPHdrVal contType(contTypeStr); TRAP(leaveValue, iTransaction.Request().GetHeaderCollection().SetFieldL(contTypeStrfield,contType)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("SetNewHeader() : StringPool().SetFieldL() TRAP")); } contTypeStr.Close(); contTypeStrfield.Close(); } TInt GetHeaderL(RHTTPHeaders aHeaders,const TDesC8& aHdrField,TDes& aVal)//获取header { TPtrC8 aHdrFieldSymbptr(aHdrField); THTTPHdrVal contTypeStrValue; TInt leaveValue; RStringF contTypeStr; TRAP(leaveValue, contTypeStr = iSession.StringPool().OpenFStringL(aHdrFieldSymbptr)); if (leaveValue != KErrNone ) { User::InfoPrint(_L("GetHeader() : StringPool().OpenFStringL() TRAP")); } TInt headererror; headererror = aHeaders.GetField(contTypeStr,0, contTypeStrValue); contTypeStr.Close(); if (headererror != KErrNone || headererror == KErrNotFound) { return 0; } else { switch (contTypeStrValue.Type()) { case THTTPHdrVal::KTIntVal: //< the value is a case-sensitive string { TBuf8<32> buf; buf.Format(_L8("%d"),contTypeStrValue.Int()); aVal.Copy(buf); break; } case THTTPHdrVal::KStrVal: //< the value is a case-sensitive string case THTTPHdrVal::KStrFVal: //< the value is a case-insensitive string { RStringF tempheader; TInt i_size=0; tempheader = iSession.StringPool().StringF(contTypeStrValue.StrF()); TText16 buf1[128]; TPtr16 tPtr16(buf1,128); TText16 buf2[128]; i_size = ( tempheader.DesC().Length() * sizeof(TText16)) + sizeof(TText16); TPtr16 p16Val((unsigned short *)buf2,i_size); p16Val.Copy(tempheader.DesC()); p16Val.PtrZ(); tPtr16.Append(p16Val); aVal = tPtr16; } break; case THTTPHdrVal::KDateVal: //< the value is a date/time case THTTPHdrVal::KNoType: //< no value has yet been set default : break; } return 1; } } void SetCookieL(RHTTPHeaders aHeaders)//设置cookie { RStringPool string_pool = iSession.StringPool(); RStringF cookie_rsf = string_pool.StringF(HTTP::ECookie,RHTTPSession::GetTable()); THTTPHdrVal field_value; field_value.SetStrF (cookie_rsf); aHeaders.SetFieldL(cookie_rsf, field_value); THTTPHdrVal cookie_hdr; RStringF cookie_name_rsf = string_pool.StringF(HTTP::ECookieName,RHTTPSession::GetTable()); RStringF name = string_pool.OpenFStringL (iCookieName); cookie_hdr.SetStrF (name); aHeaders.SetParamL (cookie_rsf, cookie_name_rsf, cookie_hdr, 0); RStringF cookie_value_rsf = string_pool.StringF(HTTP::ECookieValue,RHTTPSession::GetTable()); RStringF value = string_pool.OpenFStringL (iCookieValue); cookie_hdr.SetStrF (value); aHeaders.SetParamL (cookie_rsf, cookie_value_rsf, cookie_hdr, 0); name.Close(); value.Close(); }
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。