gpt4 book ai didi

c++ - Http post - 发送大数据时连接重置 vc++

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:10:50 25 4
gpt4 key购买 nike

我的代码需要使用 vc++ 将 xml 数据发布到服务器,我使用 CInternetSession 进行发布,使用 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");
}
}

解决这个问题的任何想法或建议

最佳答案

这不是一个 POST,它是一个 GET 请求,所有数据都插入到 URL 中。由于各种原因,大多数服务器都会对 URL 长度进行限制。如果您超过此限制,服务器的响应将是根据您正在尝试 DDOS 或缓冲区溢出攻击的理论立即断开您的连接。

查看 CInternetSession::OpenURL 的文档和 CHttpFile ,很明显您不能为此使用 OpenURL。它无法让您指定(如文档中所称的)动词用于您的 HTTP 请求。

您将不得不想出一种方法来使用 HttpOpenRequest代替功能。这看起来要复杂得多,因为您必须自己将 URL 选择到它的组成部分中。也许该库有一些不错的 URL 解析函数,您可以使用它来执行此操作。

我必须说这是一个设计非常糟糕的库。

关于c++ - Http post - 发送大数据时连接重置 vc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com