首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net的VB脚本

vb.net的VB脚本
EN

Stack Overflow用户
提问于 2016-03-28 22:46:31
回答 2查看 383关注 0票数 1

我获得了一个旧的VBScript,用于检索考试成绩,我正试图将其转换为VB.net表单应用程序。我坚持使用这个函数

代码语言:javascript
复制
Function getit()
Dim xmlhttp
Dim pageNum
Dim objStream
Dim objDebugStream


Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 1 'adTypeBinary
pageNum = 1


Do While pageNum > 0
   Set xmlhttp=CreateObject("MSXML2.ServerXMLHTTP")

   'strURL = DownloadDest
    Wscript.Echo "Download-URL: " & strURL & "&page_num=" & pageNum

    'For basic auth, use the line below together with user+pass variables above
     xmlhttp.Open "GET", strURL & "&page_num=" & pageNum, false
    xmlhttp.Send
    Wscript.Echo "Download-Status: " & xmlhttp.Status & " " & xmlhttp.statusText

    If xmlhttp.Status = 200 Then
        If Left(LCase(xmlhttp.responseText),16) <> "no records found" Then
            If objStream.State = 0 Then
                objStream.Open
            End If
            objStream.Write xmlhttp.responseBody

            If debugEachPage Then
                Set objDebugStream = CreateObject("ADODB.Stream")
                objDebugStream.Type = 1 'adTypeBinary
                objDebugStream.Open
                objDebugStream.Write xmlhttp.responseBody
                objDebugStream.SaveToFile ".\sortest_aleks_" & classCode & "_page_" & pageNum & ".csv"
                objDebugStream.Close
                Set objDebugStream = Nothing
            End If
        Else
            If pageNum = 1 Then
                WScript.Echo "No Records Found for " & classCode
            End If
            pageNum = 0 ' Have to set this to exit loop
        End If
    Else
        WScript.Echo "Response Status of " & xmlhttp.Status & " for " & classCode
    End If

    If pageNum <> 0 Then
        pageNum = pageNum + 1
    End If
    Set xmlhttp=Nothing
Loop

If objStream.State <> 0 Then
    objStream.SaveToFile LocalFile
    objStream.Close
End If
Set objStream = Nothing

End函数

我写的内容是这样的

代码语言:javascript
复制
 Private Sub GetALEKSData(ByVal strURL As String)
        REM ======================================================================================================
        ' This Module will access the ALEKS Web Site and access the CofC foreign language scores for the terms indicated days
        ' The Comma Seperated Values (CSV) as then stored in the main form Text Box
        '=========================================================================================================
        Dim ALEKStr As System.IO.Stream = Nothing
        Dim srRead As System.IO.StreamReader = Nothing

    Try
        'Create a WebReq for the URL
        Dim WebReq As System.Net.WebRequest = System.Net.HttpWebRequest.Create(strURL)

        'If required by the server, set the credentials.
        WebReq.Credentials = CredentialCache.DefaultNetworkCredentials
        'Get the Respponse.
        Dim WebResp As System.Net.WebResponse = WebReq.GetResponse

        ' Display the status.


        ' If required by the server, set the credentials.


        ALEKStr = WebResp.GetResponseStream
        srRead = New System.IO.StreamReader(ALEKStr)
        ' read all the text 

        TextBox1.Text = srRead.ReadToEnd
    Catch ex As Exception
        TextBox1.Text = QQ  REM Wipe Text box to indicate No DATA to Process

    Finally
        '  Close Stream and StreamReader when done
        srRead.Close()
        ALEKStr.Close()
    End Try
    Debug.Print(TextBox1.Text)
    REM Remove NO Data message
    If InStr(TextBox1.Text, "No records match criteria.") > 0 Then TextBox1.Text = QQ

    DataFileHasData = Len(TextBox1.Text) > 0

结束子对象

它返回的是:访问被拒绝: wrong3 HTTP header from

不知道我错过了什么

EN

回答 2

Stack Overflow用户

发布于 2016-03-28 23:48:20

试试这个:

代码语言:javascript
复制
Private Sub GetALEKSData(ByVal strURL As String)
    REM ======================================================================================================
    ' This Module will access the ALEKS Web Site and access the CofC foreign language scores for the terms indicated days
    ' The Comma Seperated Values (CSV) as then stored in the main form Text Box
    '=========================================================================================================

    Using wc As New System.Net.WebClient()
        Try 
           wc.Credentials = CredentialCache.DefaultNetworkCredentials
           TextBox1.Text = wc.DownloadString(strURL)
        Catch
            TextBox1.Text = QQ
        End Try
    End Using    

    Debug.Print(TextBox1.Text)
    If TextBox1.Text.Contains("No records match criteria.") Then TextBox1.Text = QQ
    DataFileHasData = Not String.IsNullorWhiteSpace(TextBox1.Text)
End Sub

如果这不起作用,错误消息会显示“访问被拒绝”,所以问题可能出在下面这一行:

代码语言:javascript
复制
wc.Credentials = CredentialCache.DefaultNetworkCredentials

如果这仍然不起作用,安装fiddler并将旧的vbscript发送的超文本传输协议请求与新的VB.Net代码进行比较。您将能够看到您所缺少的内容。

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 04:14:36

设置======================================================================================================修复了问题私有子GetWEBData(ByVal strURL作为字符串) REM ======================================================================================================‘此模块将访问网站,并访问指示日期的术语的逗号分隔值(CSV),然后将其存储在主窗体文本框'=========================================================================================================’清除现有数据

代码语言:javascript
复制
    Try
        'Create a WebReq for the URL
        Dim WebReq As HttpWebRequest = CType(WebRequest.Create(strURL), HttpWebRequest)

        'If required by the server, set the credentials.
        WebReq.Credentials = CredentialCache.DefaultNetworkCredentials
        WebReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"

        'Get the Respponse.
        'Dim WebResp As System.Net.WebResponse = WebReq.GetResponse
        Dim WebResp As HttpWebResponse = CType(WebReq.GetResponse(), HttpWebResponse)

        ' Display the status.
        ' Console.WriteLine(WebResp.StatusDescription)

        ' Open the stream using a StreamReader for easy access.
        Dim WEBtream As Stream = WebResp.GetResponseStream()

        ' Open the stream using a StreamReader for easy access.
        Dim srRead As New StreamReader(WEBtream)

        ' Read the content.
        Dim responseFromServer As String = srRead.ReadToEnd()
        ' Display the content.
        TextBox1.Text = responseFromServer
        TextBox1.Refresh()
        'Console.WriteLine(responseFromServer)

        ' Cleanup the streams and the response.
        srRead.Close()
        WEBtream.Close()
        WebResp.Close()

    Catch ex As Exception
        MsgBox("WEB DATA READ ERROR OCCURED", MsgBoxStyle.Critical, "Program Error")
    End Try

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36264717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档