Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 按顺序相互依赖的多个httprequest_Vb.net_Vbscript - Fatal编程技术网

Vb.net 按顺序相互依赖的多个httprequest

Vb.net 按顺序相互依赖的多个httprequest,vb.net,vbscript,Vb.net,Vbscript,我正在将一个VBScript转换为VB.Net,我在处理web请求时挂断了 我已经读到我不需要MSXML2.XMLHTTP对象,但在VB.Net中执行webrequest似乎要复杂得多 VBScript源(未给出实际URL和post字符串): 这样就可以工作了,并返回一个漂亮的JSON字符串和结果。需要注意的几点: 第一个请求“让您登录”。不知道这是怎么回事,只是在Fiddler中注意到,当你访问这个站点时,它会将你重定向到那个URL,然后你跳回去。它与我的公司单一登录有某种联系。但是,没有它

我正在将一个VBScript转换为VB.Net,我在处理web请求时挂断了

我已经读到我不需要MSXML2.XMLHTTP对象,但在VB.Net中执行webrequest似乎要复杂得多

VBScript源(未给出实际URL和post字符串):

这样就可以工作了,并返回一个漂亮的JSON字符串和结果。需要注意的几点:

  • 第一个请求“让您登录”。不知道这是怎么回事,只是在Fiddler中注意到,当你访问这个站点时,它会将你重定向到那个URL,然后你跳回去。它与我的公司单一登录有某种联系。但是,没有它脚本就无法工作
  • 第二个请求实际上运行搜索
  • 第三个请求以JSON字符串的形式从不同的URL提取结果,这正是我最终想要的
  • 实际的“站点”由几个框架组成。一个框架是构建第二个请求的webform。另一个框架使用来自第三个请求的JSON以良好的格式拉/显示结果
我试着在这里使用这个函数:按顺序运行这些请求,但它不起作用。我认为这是因为每次调用函数时,它都会生成一个新的HTTPRequest

我认为这和cookies to有关,但也不清楚它在vb.net中是如何工作的

TL;如何将上述脚本转换为vb.net

另外,为什么在VB.Net中要复杂得多?我本以为这会更容易,哈哈。

在这个例子中尝试使用这个类。它使用WebRequest类处理您引用的示例中的大部分代码

    Dim objWebClient As New WebClient()

    objWebClient.DownloadString(sLoginUrl)

    objWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
    objWebClient.UploadString(sResultsURL, "POST", sFormData)

    objWebClient.DownloadString(sResultsHandlerURL)

我在我的帖子上得到了克劳科德的建议。我在帖子中的链接中修改了该函数,如下所示:

Function WRequest(URL As String, method As String, POSTdata As String, ByRef cookieJar As CookieContainer) As String
    Dim responseData As String = ""
    Try

        Dim hwrequest As Net.HttpWebRequest = Net.WebRequest.Create(URL)
        hwrequest.CookieContainer = cookieJar
        hwrequest.Accept = "*/*"
        hwrequest.AllowAutoRedirect = True
        hwrequest.UserAgent = "http_requester/0.1"
        hwrequest.Timeout = 60000
        hwrequest.Method = method
        If hwrequest.Method = "POST" Then
            hwrequest.ContentType = "application/x-www-form-urlencoded"
            Dim encoding As New ASCIIEncoding() 'Use UTF8Encoding for XML requests
            Dim postByteArray() As Byte = encoding.GetBytes(POSTdata)
            hwrequest.ContentLength = postByteArray.Length
            Dim postStream As IO.Stream = hwrequest.GetRequestStream()
            postStream.Write(postByteArray, 0, postByteArray.Length)
            postStream.Close()
        End If
        Dim hwresponse As Net.HttpWebResponse = hwrequest.GetResponse()
        If hwresponse.StatusCode = Net.HttpStatusCode.OK Then
            Dim responseStream As IO.StreamReader = _
              New IO.StreamReader(hwresponse.GetResponseStream())
            responseData = responseStream.ReadToEnd()
        End If
        hwresponse.Close()
    Catch e As Exception
        responseData = "An error occurred: " & e.Message
    End Try
    Return responseData
End Function
Dim cookieJar As New CookieContainer

WRequest(sLoginURL, "GET", "", cookieJar)
WRequest(sResultsURL, "POST", postString, cookieJar)
Debug.Print(WRequest(sResultsHandlerURL, "GET", "", cookieJar))
然后称之为:

Function WRequest(URL As String, method As String, POSTdata As String, ByRef cookieJar As CookieContainer) As String
    Dim responseData As String = ""
    Try

        Dim hwrequest As Net.HttpWebRequest = Net.WebRequest.Create(URL)
        hwrequest.CookieContainer = cookieJar
        hwrequest.Accept = "*/*"
        hwrequest.AllowAutoRedirect = True
        hwrequest.UserAgent = "http_requester/0.1"
        hwrequest.Timeout = 60000
        hwrequest.Method = method
        If hwrequest.Method = "POST" Then
            hwrequest.ContentType = "application/x-www-form-urlencoded"
            Dim encoding As New ASCIIEncoding() 'Use UTF8Encoding for XML requests
            Dim postByteArray() As Byte = encoding.GetBytes(POSTdata)
            hwrequest.ContentLength = postByteArray.Length
            Dim postStream As IO.Stream = hwrequest.GetRequestStream()
            postStream.Write(postByteArray, 0, postByteArray.Length)
            postStream.Close()
        End If
        Dim hwresponse As Net.HttpWebResponse = hwrequest.GetResponse()
        If hwresponse.StatusCode = Net.HttpStatusCode.OK Then
            Dim responseStream As IO.StreamReader = _
              New IO.StreamReader(hwresponse.GetResponseStream())
            responseData = responseStream.ReadToEnd()
        End If
        hwresponse.Close()
    Catch e As Exception
        responseData = "An error occurred: " & e.Message
    End Try
    Return responseData
End Function
Dim cookieJar As New CookieContainer

WRequest(sLoginURL, "GET", "", cookieJar)
WRequest(sResultsURL, "POST", postString, cookieJar)
Debug.Print(WRequest(sResultsHandlerURL, "GET", "", cookieJar))

比VBS更复杂,哈哈,但它能工作

您需要在第一个请求上设置CookieContainer,然后在发出第二个请求时使用CookieContainer的相同实例。是一个用C#演示类似事情的示例。很抱歉格式化,它并没有完全从我以前的博客中完整地出现。这就成功了,修改了我链接中的函数,向ByRef传递了一个cookie容器,它成功了。在下面发布最终解决方案。谢谢不走运。看起来应该行得通,但不行。一定是关于饼干的处理方法。我从上面听从了克劳科德的建议,结果成功了。在下面发布了完整的解决方案。