1

我正在尝试维护一个 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 比较浏览器与本地数据

软件中编写的解析功能会查找“nitf version =”标志,以了解何时找到要用于格式化的统计数据/表格。

我的问题是,是否有一种更简单、更优雅的解决方案可以一次将所有网页源数据拉下,在网络浏览器中可见?还是我必须提取响应正文,解析正文文本,使用变量构建 URL,传递更多单独的页面 URL 请求,存储该文本,解析该数据,然后将解析后的数据加载回原始正文数据?

我想尽可能少地改变书面软件。

4

1 回答 1

0

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

于 2017-04-18T19:00:11.917 回答