HttpSendRequest WININET卡住 - 需要很长时间才能完成 - WINDOWS XP

时间:2010-12-07 10:02:42

标签: winapi wininet

好吧,我对这个wininet功能有严重的问题,当我在Windows 7上运行我的程序时,一切运行正常,但是当我尝试在Windows XP Service Pack 3上使用它时。有时需要HttpSendRequst太长时间才能完成,我真的不知道为什么,有时为同一个请求,它几乎立即完成。我正在用我的编程加载网站。

Wininet中的Win 7和XP有什么区别?我尝试了所有的一切,但没有工作。例如,为Httpsendrequest设置超时并重复或重新设置最大互联网连接。但似乎没有任何效果,而且功能总是一样的。

如果可以,请帮忙。

m_hInternet = InternetOpenA(m_strAgentName.c_str(), INTERNET_OPEN_TYPE_PRECONFIG , 
            NULL, NULL, 0);
    if (!m_hInternet) {
        m_strLastError = "Cannot open internet";
        m_lastErrorCode = GetLastError();
        return false;
    }
m_hSession = InternetConnectA(m_hInternet, 
            m_strServerName.c_str(), 
            m_wPort,
            m_strUserName.c_str(), 
            m_strPassword.c_str(),
            INTERNET_SERVICE_HTTP,
            INTERNET_FLAG_KEEP_CONNECTION,
            0);
m_hRequest = HttpOpenRequestA(m_hSession, 
            this->m_strMethod.c_str(),
            m_strObjectName.c_str(),
            NULL,
            m_strReferer != "" ? m_strReferer.c_str() : NULL,
            NULL,
            INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_KEEP_CONNECTION, 
            m_ReqID);
bool result =  HttpSendRequestA(    m_hRequest,
                                    this->m_strAddHeaders.size() == 0 ? NULL : this->m_strAddHeaders.c_str(), 
                                    this->m_strAddHeaders.size(), 
                                    (char*)this->m_strContent.c_str(),
                                    this->m_strContent.size());

2 个答案:

答案 0 :(得分:0)

您是否检查该请求是否已成功完成?应该有一些带文本的响应代码。否则您的快速请求可能是由异常终止引起的。

如果这是一个完整的代码示例,我建议添加HttpEndRequest

答案 1 :(得分:0)

当请求根本没有完成时,我已经遇到过几次这个问题。

我发现的唯一解决方案是在每次请求之间给程序足够的时间。

因此,您可以使用缓冲区存储和添加所有数据,并且每隔X次通过请求将其发送给它!