在VB6中检索WinHttpReq.ResponseBody跳过热链接的页面数据的最佳方法

时间:2017-04-18 18:35:45

标签: xml http vb6 winhttprequest

我正在尝试维护一段Visual Basic 6软件,该软件的编写是为了帮助加快某个部门的文本格式化工作。我不是一个计算机工程师/科学家,但这个软件属于我的管辖范围,因为它是由我被雇用来取代的绅士写的。

此工具用于在短时间内格式化大量数据,以消除手动格式化。

似乎是传递给程序用户指定的URL的WinHttpRequest大部分都在工作。但是,当调用ResponseBody属性时,不会抓取编写的软件所期望的信息。我不确定之前如何在URL页面上托管数据,但是当通过Web浏览器检查有问题的URL的页面源时,预期要检索的数据是可见的,但似乎是热链接的来自不同的URL /位置。但是当WinHttpReq.ResponseBody在本地生成并转储到文件中时,会传递预期和需要的信息。

看起来它正在传递数据,因为数据是通过原始URL上的单独热链接引用的。我的问题是,在检查页面源时检索可见数据的最简单方法是什么,但在ResponseBody函数调用中没有检索到。 ResponseBody调用似乎也将热链接URL放到初始HTTP请求URL中,但我认为用于构建热链接的信息和ID存储在数据中。

' Create an array to hold the response data.
Dim d() As Byte

' Assemble an HTTP request.
WinHttpReq.Open "GET", ap_feedreq, False

' Set the user name and password.
WinHttpReq.SetCredentials ap_user, ap_pass, _
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER

' Send the HTTP Request.
WinHttpReq.Send

' Display the response headers.
' MsgBox WinHttpReq.GetAllResponseHeaders & "  " & WinHttpReq.ResponseText

If WinHttpReq.status = 200 Then

    webwire1.StatusBar1.Panels(1).Text = "Authentication Complete ..... 
    Parsing XML File"
    webwire1.StatusBar1.Refresh

    docpath1$ = mydocpath + "aptemp.txt"
    Open docpath1$ For Binary As #1
    d() = WinHttpReq.ResponseBody
    Put #1, 1, d()
    Close #1

这是一张图片,展示了我所看到的,希望能更好地展示我所指的内容。

Feed Body Comparison Browser vs. Local Data

在软件中编写的解析函数查找“nitf version =”标志,以便知道何时找到要用于格式化的统计数据/表。

我的问题是,是否有一个更简单,更优雅的解决方案,可以在Web浏览器中一次性显示所有网页源数据?或者我是否必须拉动响应正文,解析正文,使用变量构建URL,传递更多单个页面URL请求,存储该文本,解析该数据,然后将解析后的数据加载回原始正文数据?

我想尽可能少地更改编写的软件。

1 个答案:

答案 0 :(得分:0)

最好的办法是查看Fiddler的输出,看看最低级别的差异。如果有人在SO上帮助您,他们可能需要查看原始HTTP响应。据我所知,这不是(直接)与VB6或WinHttpRequest相关,但我不确定浏览器如何决定获取数据 - 它可能是通过JavaScript或XML / HTTP / feed特定的东西。甚至可能是您需要发送Accept标头以从AP服务器获取不同的内容。或者,就像你说的那样,你可能需要手动拉出每个URL。如果您需要像浏览器那样完全,您可以使用NWJSElectronCEFPhantomJS(或现在{{3在VB6中有一个headless Chromium控件。