【问题标题】:WinHTTPRequest.ResponseText not returning the full HTML?WinHTTPRequest.ResponseText 没有返回完整的 HTML?
【发布时间】:2011-09-16 11:06:31
【问题描述】:

我尝试使用 WinHTTP 请求在 VB.Net 中检索网页(HTTPS 网站),但由于某种原因它只返回部分 HTML,对它可以占用的字符数有任何长度限制吗?如果是这样,我可以在第 10000 个字符之后获取内容吗?

相关代码在这里:

oRequest = 新的 WinHttp.WinHttpRequest oRequest.Open("GET", sQueryURL, False) oRequest.SetTimeouts(0, 600000, 0, 0) oRequest.Send() 如果 oRequest.Status = "200" 那么 Debug.Print(oRequest.ResponseText) 别的 万一

【问题讨论】:

    标签: vb.net https winhttprequest


    【解决方案1】:

    我已经有一段时间没有使用 WinHttpRequest 了,但我相信只要你阅读了 ResponseText,WinHttpRequest 就会放弃处理响应。由于您在阅读响应时正在潜水,我猜想在您打印 ResponseText 时完整的响应还没有到达!

    我认为您有 2 个选项可以尝试:

    1. 使用WinHttpRequest.WaitForResponse() 等待整个响应准备好
    2. 使用WinHttpRequest.ResponseStream 以块的形式处理响应(您需要将块从字节转换为可读文本)

    我不知道你是否使用 VB.Net,但如果你是:考虑使用System.Web.HttpRequest。界面几乎相同,您可以更轻松地找到工作示例和建议。

    【讨论】:

    • 尝试用HTTPRequest类重写,还是不行,一直停在第249行,大概2.4k字符......
    • 以上 2 个选项仍然适用于 System.Web.HttpRequest。较大的响应需要时间来下载,因此让您的代码等待 HttpRequest 完全处理很重要。试试这个例子:msdn.microsoft.com/en-us/library/… 注意它使用 StreamReader 来处理整个响应。
    • 我的第一个预感是正确的,来自服务器的响应是不完整的。具体来说,标头包含“Transfer-Encoding:chunked”。唯一的方法是添加额外的代码,可以梳理出分块大小并返回服务器并请求下一个块,直到所有块都已发送。我无法找到一个工作示例来指向您。我建议寻找替代品,也许是这个:code.google.com/p/c-sharp-http-client 但我会让你决定它是否能胜任!
    • @Rocjoe:所以基本上现有/默认库中没有办法获取块大小?块大小是什么标头参数?非常感谢您的帮助!
    • @zhuanyi 不幸的是,这也是我被卡住的部分。我找到的最佳答案描述了逻辑,但并未将其应用于运行代码:stackoverflow.com/questions/318489/… ...所以有一条前进的道路,但您可以通过寻找免费的替代 Http 库来节省一些时间/精力。
    猜你喜欢
    • 2018-11-24
    • 2019-03-12
    • 2021-11-04
    • 2017-06-02
    • 2021-12-15
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多