My Code需要使用vc ++将xml数据发布到服务器,使用CInternetSession作为post,tinyxml使用xml。
如果我的xml数据大约是8 kb,那么数据发布真的很好。但是,如果xml文件大小约为15 kb,那么我将收到“重置与服务器的连接”。
TiXmlDocument doc( "C:\\test.xml" );
bool loadOkay = doc.LoadFile();
if ( loadOkay )
{
TiXmlPrinter printer;
printer.SetIndent("\t");
docs.Accept( &printer );
docs.Print();
CString zURLstest = printer.CStr();
#define MAX_READ_BUFFER 102400
CInternetSession* p_CInternetSession;
CHttpFile* p_HttpFile;
CStdioFile* p_File;
char z_ResponseBuff [MAX_READ_BUFFER];
ULONG ul_ReadLen;
CFile cFResponce;
p_CInternetSession = new CInternetSession(NULL,1,PRE_CONFIG_INTERNET_ACCESS,NULL,NULL,0);
p_CInternetSession->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,10000);
p_CInternetSession->SetOption(INTERNET_OPTION_CONNECT_RETRIES, 3);
CString zURL = "http://xxx.xxx.xxx.x/Test/TestServlet?Data=";
CString zDWURL(zURL + zURLstest);
p_File = p_CInternetSession->OpenURL(zDWURL, 1, INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE);
AfxMessageBox(zDWURL);
p_HttpFile = (CHttpFile*)p_File;
ul_ReadLen = p_HttpFile->Read (z_ResponseBuff, MAX_READ_BUFFER);
DWORD dwError;
p_HttpFile->QueryInfoStatusCode(dwError);
if(dwError==200)
{
AfxMessageBox("Data updated successfully");
remove(c:\\test.xml");
}
}
解决此问题的任何想法或建议
答案 0 :(得分:1)
这不是POST,它是一个GET请求,所有数据都粘在URL中。由于各种原因,大多数服务器都会对URL长度进行限制。如果超过此限制,服务器的响应将立即断言您对正在尝试DDOS或缓冲区溢出漏洞的理论的偏见。
查看CInternetSession::OpenURL和CHttpFile的文档,很明显您无法使用OpenURL
。它无法让您指定(作为文档调用它)动词用于您的HTTP请求。
您将不得不想办法使用HttpOpenRequest函数。这看起来更加复杂,因为您必须自己选择URL到其组件部分。也许这个库有一些很好的URL解析函数可以用来做这个。
我必须说这是一个非常糟糕的图书馆。