求救(在线等待)vc 中如何用POST方法发送 文件到Web服务器 vc 中如何用POST方法发送xml 文件到Web服务器,就象IE页面中提交文件到服务器(服务器页面接收) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是文件上传,不管是否XML文件。用http post方法 发下是我的一段代码,你可以看一下。 nRet = nProxyV(bsURL,bIsGet,vtPostData,bsHeader,lStatus,vtResponse,bsResponse); int nWtbsSetRequestHeader( MSXML2::IServerXMLHTTPRequestPtr httpServer, _bstr_t bsHeader ) // , int nContentLen ){ CString strHeader, strItem, strName, strValue; int nLen, nStt, nEnd, nCur, nFindN, nFindR, nFindC;// char lcaTmp[ 32 ]; HRESULT hrRet;// 0. Trap if( 0 == bsHeader.length() ) return 0; if( NULL == httpServer ) return -1;// 1. Init strHeader = (char*)bsHeader; strItem = ""; strName = ""; strValue = ""; nLen = strHeader.GetLength(); nStt = 0; nEnd = 0; nCur = 0;// 2. Work for( ; nCur >= 0 && nCur < (nLen-1); ) { nStt = nCur; nFindN = strHeader.Find( "\n", nCur ); nFindR = strHeader.Find( "\r", nCur ); nFindC = strHeader.Find( ":", nCur ); if( nFindN < 0 || nFindR < 0 || nFindC < 0 ) break; // 如果有一个没有找到,没有项目了 if( abs(nFindN-nFindR) != 1 || nFindC >= min(nFindN,nFindR) ) { // 如果'\n'和'\r'没有相邻,并且':'在其中一个之后,非法 nCur = max( nFindN, nFindR ) + 1; continue; } // 得到Segment/Item的结束位置, max('\n','\r') // 在后继的操作操作中,被调用 nEnd = max( nFindN, nFindR ); // 得到一个Segment/Item: "ItemName:ItemValue" // 得到ItemName, ItemValue strItem = strHeader.Mid( nCur, (nEnd-nCur-1) ); strName = strHeader.Mid( nCur, (nFindC-nCur) ); strValue= strHeader.Mid( nFindC+1, nEnd-(nFindC+1)-1 ); // 移动当前指针,在后继的操作中,不能再使用nCur!!! nCur = nEnd + 1; // setRequestHeader if( !stricmp("Content-Length",(char*)(LPCTSTR)strName) ) { // Content-Length continue; } CString temp = strValue; temp.TrimRight(); if( temp.GetLength() == 0 ) { // 如果strValue为空串,那么不setRequestHeader() continue; } hrRet = httpServer->setRequestHeader( _bstr_t(strName), _bstr_t(strValue) ); if( FAILED(hrRet) ) return -9; // continue continue; } // end of for()_Loop// 3. Return return 0;} // end of nWtbsSetRequestHeader()#define MClsIDHttpReqPtr L"{afb40ffd-b609-40a3-9828-f88bbe11e4e3}"int nProxyV( _bstr_t bsURL, BOOL bIsGet, const _variant_t & varBody, _bstr_t & bsHeader, long & lStatus, _variant_t & varResponse,_bstr_t &bsResponse ){ int nRet; HRESULT hrRet; _bstr_t bsTest, bsSend, bsRecv; MSXML2::IServerXMLHTTPRequestPtr httpServer; nRet = MacSuccess;// 1. Work try{ httpServer.CreateInstance( MClsIDHttpReqPtr ); if( NULL == httpServer ){ return MacErrOthers; } // connect.setTimeouts // hrRet = httpServer->setTimeouts( 15000, 5000, 5000, 5000 ); hrRet = httpServer->setTimeouts( 2000 * (g_WtbsIni.nHttpTimeOut), 1000 * g_WtbsIni.nHttpTimeOut, 1000 * g_WtbsIni.nHttpTimeOut, 2000 * g_WtbsIni.nHttpTimeOut ); if( S_OK != hrRet ){ httpServer.Release(); return MacErrOthers; } // connect.open() hrRet = httpServer->open(bIsGet ? (L"GET") : (L"POST"), bsURL, VARIANT_FALSE ); if( S_OK != hrRet ){ httpServer.Release(); return MacErrIOpen; } // send Header hrRet = nWtbsSetRequestHeader( httpServer, bsHeader ); // connect.send() if(bIsGet) { hrRet = httpServer->send(); } else { hrRet = httpServer->send(varBody); } if( S_OK != hrRet ){ httpServer.Release(); return MacErrSendRqst; } // connect.get_responseText bsHeader = httpServer->getAllResponseHeaders(); lStatus = httpServer->status; varResponse = httpServer->responseBody; bsResponse = httpServer->GetresponseText(); // return httpServer.Release(); return MacSuccess; } catch (_com_error e) { httpServer.Release(); return MacErrCatch; } catch (...) { httpServer.Release(); return MacErrCatch; } httpServer.Release(); return MacSuccess;} // end of nProxyV() VC工程中如何添加文件夹中的源文件(.h和.c) 有关于 StretchDIBits . StretchBlt等函数的使用问题 视图切分问题,在线等待中... 请问该如何动态改变按钮的风格? 高分求教!!派生状态栏的详细生成方法 求助:Linking... HELP!!100分送高手 那些接口是由COM库实现的 关于串口的问题 如何修改CToolBar的标题? Adding and Deleting Taskbar Icons in the Status Area 大虾请进,在线等待,解决后给分到200
_bstr_t bsHeader ) // , int nContentLen )
{
CString strHeader, strItem, strName, strValue;
int nLen, nStt, nEnd, nCur, nFindN, nFindR, nFindC;
// char lcaTmp[ 32 ];
HRESULT hrRet;// 0. Trap
if( 0 == bsHeader.length() )
return 0; if( NULL == httpServer )
return -1;// 1. Init
strHeader = (char*)bsHeader;
strItem = "";
strName = "";
strValue = "";
nLen = strHeader.GetLength();
nStt = 0;
nEnd = 0;
nCur = 0;// 2. Work
for( ; nCur >= 0 && nCur < (nLen-1); )
{
nStt = nCur;
nFindN = strHeader.Find( "\n", nCur );
nFindR = strHeader.Find( "\r", nCur );
nFindC = strHeader.Find( ":", nCur );
if( nFindN < 0 || nFindR < 0 || nFindC < 0 )
break; // 如果有一个没有找到,没有项目了
if( abs(nFindN-nFindR) != 1 || nFindC >= min(nFindN,nFindR) )
{ // 如果'\n'和'\r'没有相邻,并且':'在其中一个之后,非法
nCur = max( nFindN, nFindR ) + 1;
continue;
} // 得到Segment/Item的结束位置, max('\n','\r')
// 在后继的操作操作中,被调用
nEnd = max( nFindN, nFindR ); // 得到一个Segment/Item: "ItemName:ItemValue"
// 得到ItemName, ItemValue
strItem = strHeader.Mid( nCur, (nEnd-nCur-1) );
strName = strHeader.Mid( nCur, (nFindC-nCur) );
strValue= strHeader.Mid( nFindC+1, nEnd-(nFindC+1)-1 ); // 移动当前指针,在后继的操作中,不能再使用nCur!!!
nCur = nEnd + 1; // setRequestHeader
if( !stricmp("Content-Length",(char*)(LPCTSTR)strName) )
{ // Content-Length
continue;
}
CString temp = strValue;
temp.TrimRight();
if( temp.GetLength() == 0 )
{ // 如果strValue为空串,那么不setRequestHeader()
continue;
} hrRet = httpServer->setRequestHeader( _bstr_t(strName), _bstr_t(strValue) );
if( FAILED(hrRet) )
return -9; // continue
continue;
} // end of for()_Loop// 3. Return
return 0;
} // end of nWtbsSetRequestHeader()
#define MClsIDHttpReqPtr L"{afb40ffd-b609-40a3-9828-f88bbe11e4e3}"int nProxyV( _bstr_t bsURL, BOOL bIsGet, const _variant_t & varBody,
_bstr_t & bsHeader, long & lStatus, _variant_t & varResponse,_bstr_t &bsResponse )
{
int nRet; HRESULT hrRet;
_bstr_t bsTest, bsSend, bsRecv;
MSXML2::IServerXMLHTTPRequestPtr httpServer; nRet = MacSuccess;// 1. Work
try{
httpServer.CreateInstance( MClsIDHttpReqPtr );
if( NULL == httpServer ){
return MacErrOthers;
} // connect.setTimeouts
// hrRet = httpServer->setTimeouts( 15000, 5000, 5000, 5000 );
hrRet = httpServer->setTimeouts(
2000 * (g_WtbsIni.nHttpTimeOut),
1000 * g_WtbsIni.nHttpTimeOut,
1000 * g_WtbsIni.nHttpTimeOut,
2000 * g_WtbsIni.nHttpTimeOut );
if( S_OK != hrRet ){
httpServer.Release();
return MacErrOthers;
} // connect.open()
hrRet = httpServer->open(bIsGet ? (L"GET") : (L"POST"), bsURL, VARIANT_FALSE );
if( S_OK != hrRet ){
httpServer.Release();
return MacErrIOpen;
} // send Header
hrRet = nWtbsSetRequestHeader( httpServer, bsHeader ); // connect.send()
if(bIsGet)
{
hrRet = httpServer->send();
}
else
{
hrRet = httpServer->send(varBody);
}
if( S_OK != hrRet ){
httpServer.Release();
return MacErrSendRqst;
} // connect.get_responseText
bsHeader = httpServer->getAllResponseHeaders();
lStatus = httpServer->status;
varResponse = httpServer->responseBody;
bsResponse = httpServer->GetresponseText(); // return
httpServer.Release();
return MacSuccess;
}
catch (_com_error e)
{
httpServer.Release();
return MacErrCatch;
}
catch (...)
{
httpServer.Release();
return MacErrCatch;
} httpServer.Release();
return MacSuccess;
} // end of nProxyV()