关于如何使用HTTP方式获取指定网页内的文件列表到字符串或数组?

LittleCalabash 2018-12-27 10:24:30
我公司有台服务器,其中D:\Update放的是程序自动更新文件,之前是在IIS里设置FTP指定目录D:\Update,通过FTP方式遍历得到一个字符串分离成数组,再以http方式逐个下载,现在防火墙坏了,不知道是不是这原因,更新不了了,查看更新程序代码卡再如下位置
ftpReq.Timeout = 10000
ftpRes = ftpReq.GetResponse() '卡再这里,代码第12行,到这里就进行不下去了,FTP连接超时,现在试了下外部电脑确实访问不了FTP地址了。
所以我把更新文件夹再IIS里改成了网站,现在可以通过网址http://www.1234abcd.com:8080直接打开和FTP登录后一样的文件列表界面,但是不知道http方式如何获取文件列表,已经折腾了3天了,现贴出代码,寻求解决方案,请大神帮助!只要能使用HTTP方式获取到这个页面的文件列表就行,不存在文件夹,只有几个文件。

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Control.CheckForIllegalCrossThreadCalls = False

Dim ftpReq As System.Net.FtpWebRequest = Nothing
Dim ftpRes As System.Net.FtpWebResponse = Nothing
ftpReq = System.Net.WebRequest.Create("ftp://www.1234abcd.com") '连接指定服务器
ftpReq.Credentials = New System.Net.NetworkCredential("ftpid", "ftppw")
ftpReq.Method = System.Net.WebRequestMethods.Ftp.ListDirectory
ftpReq.KeepAlive = False
ftpReq.UsePassive = False
ftpReq.Timeout = 10000 '10秒连接不上则超时
ftpRes = ftpReq.GetResponse() '更新程序现在就卡在这里
Dim strContent As String = ""
Dim content(1024) As Byte
Dim index_a As Integer = 0
Dim bufferLen As Integer = 0
index_a = ftpRes.GetResponseStream.Read(content, 0, content.Length)
bufferLen = bufferLen + index_a
While index_a > 0
index_a = ftpRes.GetResponseStream.Read(content, 0, content.Length)
bufferLen = bufferLen + index_a
End While
strContent = strContent & System.Text.Encoding.UTF8.GetString(content, 0, bufferLen)
Dim sk As Integer = 0
If InStr(strContent, "web.config") > 0 Then '屏蔽掉列表内不需要的文件名
strContent = Replace(strContent, "web.config", "")
sk = 2
Else
sk = 1
End If
strContent = Replace(strContent, "web.config", "")
Dim AR() As String = Split(strContent, vbCrLf) '获取需要更新的文件到数组

Dim k As Integer = UBound(AR) - sk
ProgressBarX2.Value = 0
ProgressBarX2.Minimum = 0
ProgressBarX2.Maximum = k

For i = 0 To k
'myWebClient = New WebClient
sv = "http://www.1234abcd.com:8080/Update/" + AR(i)
Label4.Text = "正在更新:\..." + AR(i)
myWebClient = New WebClient
myWebClient.DownloadFile(New Uri(sv), Application.StartupPath + "\" + AR(i)) 'HTTP下载
'My.Computer.Network.DownloadFile(so + "/" + AR(i), sn + "\" + AR(i), "ftpid", "ftppw.", False, 9999999, True) 'FTP下载
ProgressBarX2.Value += 1
Next
Label4.Text = "更新完毕..."
WriteINI("Version", "Ver", ver2, path1)
WriteINI("UDate", "Date", Now, path1)
Pause(1)
If Dir(Application.StartupPath + "\EBS.exe") <> "" Then
Dim EBS As New Process
EBS.StartInfo.FileName = Application.StartupPath + "\EBS.exe"
EBS.Start()
Else
MessageBox.Show("未能找到主程序" & Chr(10) & "请重新安装客户端!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
End
End If
Me.Close()
Me.Dispose()
Me.BackgroundWorker1.Dispose()
End Sub
...全文
226 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你可以遍历 DirectoryInfo 对象的 GetFiles 结果数组,自己序列化产生一个文件列表(string)输出。
CloneCenter 2018-12-28
  • 打赏
  • 举报
回复
应该将需要更新的文件做成一个文本文件,固定一个文件名,用HTTP方式下载下来,分析这个文本得到需要下载的文件就可以了。本身WEB服务器不提供ftp的获取文件夹下的文件内容列表功能。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧