【问题标题】:HttpSendRequest WININET stuck - takes long time to finish - WINDOWS XPHttpSendRequest WININET 卡住 - 需要很长时间才能完成 - WINDOWS XP
【发布时间】:2011-05-21 11:54:21
【问题描述】:

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

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());

【问题讨论】:

    标签: winapi wininet


    【解决方案1】:

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

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

    【讨论】:

    • 据我所知,HttpEndRequest 仅适用于 httpSendRequestEx 函数。
    • Opps,你是对的......无论如何,我会检查每个请求是否成功完成。
    【解决方案2】:

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

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

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

    【讨论】:

    • 您能否详细说明为什么仅在问题中提到的 Windows XP 上才需要这样做?您能否提供一个小代码示例来说明缓冲数据的含义?
    • @NOhs 我在 Windows 7 aswel 上遇到过这个问题。
    猜你喜欢
    • 2017-03-14
    • 2018-02-07
    • 2016-07-30
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多