C++ Http连接后重置,同时发送大数据vc++;
我的代码需要使用vc++将xml数据发布到服务器,我使用CInternetSession发布,tinyxml发布 如果我的xml数据大约为8KB,那么发布的数据就非常好。但是,如果xml文件大小约为15KB,那么我将收到“与服务器的连接已重置”C++ Http连接后重置,同时发送大数据vc++;,c++,http,visual-c++,mfc,connection,C++,Http,Visual C++,Mfc,Connection,我的代码需要使用vc++将xml数据发布到服务器,我使用CInternetSession发布,tinyxml发布 如果我的xml数据大约为8KB,那么发布的数据就非常好。但是,如果xml文件大小约为15KB,那么我将收到“与服务器的连接已重置” 任何解决此问题的想法或建议这不是一篇文章,而是一个GET请求,所有数据都被粘贴到URL中。由于各种原因,大多数服务器对URL长度都有限制。如果您超过此限制,服务器的响应将立即断开您的连接,并对您尝试DDOS或缓冲区溢出攻击的理论产生偏见 查看和的文档,很
任何解决此问题的想法或建议这不是一篇文章,而是一个GET请求,所有数据都被粘贴到URL中。由于各种原因,大多数服务器对URL长度都有限制。如果您超过此限制,服务器的响应将立即断开您的连接,并对您尝试DDOS或缓冲区溢出攻击的理论产生偏见 查看和的文档,很明显不能使用
OpenURL
。它无法让您指定(文档称之为)用于HTTP请求的动词
您必须找到一种使用该函数的方法。这看起来要复杂得多,因为您必须自己将URL挑选到其组件中。也许库中有一些很好的URL解析函数,您可以使用它们来实现这一点
我必须说,这是一个设计非常糟糕的库。这不是一篇文章,而是一个GET请求,所有数据都被粘贴到URL中。由于各种原因,大多数服务器对URL长度都有限制。如果您超过此限制,服务器的响应将立即断开您的连接,并对您尝试DDOS或缓冲区溢出攻击的理论产生偏见 查看和的文档,很明显不能使用
OpenURL
。它无法让您指定(文档称之为)用于HTTP请求的动词
您必须找到一种使用该函数的方法。这看起来要复杂得多,因为您必须自己将URL挑选到其组件中。也许库中有一些很好的URL解析函数,您可以使用它们来实现这一点
我必须说,这是一个设计非常糟糕的图书馆。对不起,我是新来的,这让我很困惑。但是,我无法将xml数据发布到server@user1441251:因此,有两种主要方法用于将数据获取到HTTP服务器。一种是GET(您正在使用的),其中数据编码在URL中。但是GET应该只用于不修改服务器上任何内容的请求,并且因为数据是在URL中编码的,所以它只能用于数据量相对较小的请求(例如搜索查询)。您需要弄清楚如何让您的框架使用POST请求。@user1441251:我在MFC文档中为您做了一些探索,发现您至少必须使用哪些方法。对不起,我是新手,这让我感到困惑。但是,我无法将xml数据发布到server@user1441251:因此,有两种主要方法用于将数据获取到HTTP服务器。一种是GET(您正在使用的),其中数据编码在URL中。但是GET应该只用于不修改服务器上任何内容的请求,并且因为数据是在URL中编码的,所以它只能用于数据量相对较小的请求(例如搜索查询)。您需要弄清楚如何让您的框架使用POST请求。@user1441251:我在MFC文档中为您做了一些探索,并找到了您至少必须使用的方法。
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");
}
}