客户端通过代理服务器(CMWap)遇到的问题

来源:互联网 发布:淘宝网复制软件小黄鸭 编辑:程序博客网 时间:2024/05/21 17:05
移动的如果客户端对标准的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();}
原创粉丝点击