Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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 HttpWebRequest在工作中失败_Vb.net_Session_Httpwebrequest - Fatal编程技术网

Vb.net HttpWebRequest在工作中失败

Vb.net HttpWebRequest在工作中失败,vb.net,session,httpwebrequest,Vb.net,Session,Httpwebrequest,我正在尝试使用REST服务。下面是我的代码。此代码在家庭网络中运行良好,但在工作中失败 在工作时,它可以正常登录并返回会话id。但是,任何使用会话id的进一步调用都将挂起。请告诉我哪里出了问题。谢谢你的帮助 Public Shared Function login(username As String, instancename As String, password As String) 'Dim handler As New HttpClientHandler() 'hand

我正在尝试使用REST服务。下面是我的代码。此代码在家庭网络中运行良好,但在工作中失败

在工作时,它可以正常登录并返回会话id。但是,任何使用会话id的进一步调用都将挂起。请告诉我哪里出了问题。谢谢你的帮助

Public Shared Function login(username As String, instancename As String, password As String)
    'Dim handler As New HttpClientHandler()
    'handler.Proxy = New System.Net.WebProxy("proxy-test.com:8080")
    'handler.Proxy.Credentials = CredentialCache.DefaultCredentials
    'handler.UseProxy = True

    'Dim client As New HttpClient(handler)
    Dim client As New HttpClient()

    'Construct the Uri
    Dim uri As String = "https://egrcb.archer.rsa.com/api/core/security/login"
    Dim vUri As New Uri(uri)

    client.BaseAddress = vUri

    'Build the request 
    '-Headers:
    client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")

    '-Body:
    Dim body As String = "{""InstanceName"":""" + instancename + """,""Username"":""" + username + """,""UserDomain"":"""",""Password"":""" + password + """}"
    Dim content As StringContent = New System.Net.Http.StringContent(body, Encoding.UTF8, "application/json")

    '***CALL THE API***
    Dim response As HttpResponseMessage = client.PostAsync(uri, content).Result
    '******************

    'Some additional logic to process what came back to reuse it for other things - this is
    'fairly crude and simplistic, but you can write classes or add libraries to consume the
    'JSON that is passed back from the API and handle things in a more sophisticated way if you need to
    Dim status As String = response.StatusCode.ToString()
    Dim result As String = response.Content.ReadAsStringAsync().Result
    Dim statusCode As System.Net.HttpStatusCode = response.StatusCode
    Dim codeNumber As Integer = CInt(statusCode)

    'Some simple error catching - in real-world code you would need to build some logic out for these
    If codeNumber <> 200 Then
        Throw New Exception("The request failed for some reason")
    End If

    If result.Contains("RequestedObject"":null") Then
        Throw New Exception("The login failed for some reason")
    End If

    Dim extractedSessionId As String = result.Substring(result.IndexOf("SessionToken"":") + 15, 32)

    Return extractedSessionId
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim request As HttpWebRequest
    Dim response As HttpWebResponse = Nothing
    Dim reader As StreamReader
    Dim rawresp As String = ""
    'Login
    Dim sessionid As String = login(txtUserID.Text, txtEnvironmnent.Text, txtPassword.Text)
    txtSessionID.Text = sessionid
    'SOAPlogin()
    lblStatus.Text = "Logged In..."

    Try
        DGVFields.Rows.Clear()
        DGVFields.Columns.Clear()
        lblStatus.Text = "Initiating Connection..."
        request = WebRequest.Create("https://egrcb.archer.rsa.com/api/core/content/2125562")
        request.ContentType = "application/json"
        request.Headers.Add("Authorization", "Archer session-id=""" & txtSessionID.Text & """")
        request.Headers.Add("X-Http-Method-Override", "GET")
        request.Timeout = 6000
        'request.Credentials = CredentialCache.DefaultCredentials
        'Dim proxy As New WebProxy
        'Dim newUri As New Uri("http://proxy-test.com:8080")
        'proxy.Address = newUri
        'proxy.Credentials = CredentialCache.DefaultCredentials
        'request.Proxy = proxy

        lblStatus.Text = "Getting Response..."
        'get repsonse
        response = request.GetResponse()
        'Display
        Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
        'Get the stream content returned
        Dim datastream As Stream = response.GetResponseStream()
        'Open reader
        reader = New StreamReader(datastream)
        lblStatus.Text = "Reading response..."
        Application.DoEvents()
        rawresp = reader.ReadToEnd()
        lblStatus.Text = "Parsing results..."
        Application.DoEvents()
    Catch ex As Exception

    End Try
End sub
公共共享函数登录(用户名为字符串,instancename为字符串,密码为字符串)
'作为新的HttpClientHandler()的Dim处理程序
'handler.Proxy=New System.Net.WebProxy(“Proxy test.com:8080”)
'handler.Proxy.Credentials=CredentialCache.DefaultCredentials
'handler.UseProxy=True
'作为新HttpClient(处理程序)的Dim客户端
作为新的HttpClient()的Dim客户端
'构造Uri
Dim uri作为字符串=”https://egrcb.archer.rsa.com/api/core/security/login"
Dim vUri作为新Uri(Uri)
client.BaseAddress=vUri
'生成请求
“-标题:
client.DefaultRequestHeaders.TryAddWithoutValidation(“Accept”、“application/json、text/html、application/xhtml+xml、application/xml;q=0.9、*/*;q=0.8”)
“-机构:
Dim正文为字符串=“{”“InstanceName”“:”“+InstanceName+”,“Username”“:”“+Username+”,“UserDomain”“:”“,“Password”“:”“+Password+”}”
Dim content As StringContent=New System.Net.Http.StringContent(body,Encoding.UTF8,“application/json”)
'***调用API***
Dim响应为HttpResponseMessage=client.PostAsync(uri,content.Result)
'******************
“一些额外的逻辑来处理返回的内容,以便将其用于其他用途——这是
“相当粗糙和简单,但您可以编写类或添加库来使用
'从API传回的JSON,并在需要时以更复杂的方式处理
Dim status As String=response.StatusCode.ToString()
Dim结果为字符串=response.Content.ReadAsStringAsync().result
Dim状态代码为System.Net.HttpStatusCode=response.statusCode
整数形式的Dim代码编号=CInt(状态代码)
“一些简单的错误捕捉——在现实世界的代码中,您需要为这些代码构建一些逻辑
如果代码是200那么
抛出新异常(“请求因某种原因失败”)
如果结束
如果result.Contains(“RequestedObject”“:null”),则
抛出新异常(“由于某种原因登录失败”)
如果结束
Dim extractedSessionId为String=result.Substring(result.IndexOf(“SessionToken”“:”)+15,32)
返回提取的会话ID
端函数
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
Dim请求作为HttpWebRequest
作为HttpWebResponse的Dim响应=无
作为StreamReader的Dim reader
Dim RAWREP As String=“”
'登录
Dim sessionid As String=login(txtserid.Text、txtEnvironmnent.Text、txtPassword.Text)
txtSessionID.Text=sessionid
'SOAPlogin()
lblStatus.Text=“已登录…”
尝试
DGVFields.Rows.Clear()
DGVFields.Columns.Clear()
lblStatus.Text=“正在启动连接…”
request=WebRequest.Create(“https://egrcb.archer.rsa.com/api/core/content/2125562")
request.ContentType=“应用程序/json”
request.Headers.Add(“授权”、“Archer会话id=”“”&txtSessionID.Text&“”)
request.Headers.Add(“X-Http-Method-Override”、“GET”)
请求。超时=6000
'request.Credentials=CredentialCache.DefaultCredentials
'将代理设置为新的WebProxy
'将新Uri作为新Uri('http://proxy-test.com:8080")
'proxy.Address=newUri
'proxy.Credentials=CredentialCache.DefaultCredentials
'request.Proxy=Proxy
lblStatus.Text=“获取响应…”
“叫雷松斯
response=request.GetResponse()
"展示,
Console.WriteLine(CType(响应,HttpWebResponse).StatusDescription)
'获取返回的流内容
Dim datastream As Stream=response.GetResponseStream()
“开放读者
reader=新的StreamReader(数据流)
lblStatus.Text=“读取响应…”
Application.DoEvents()
rawrep=reader.ReadToEnd()
lblStatus.Text=“解析结果…”
Application.DoEvents()
特例
结束尝试
端接头

这里只是一个暗中操作,但我假设您的工作有webfilter/代理设置?可能是从web请求中剥离特定的头,或者某些防火墙甚至具有删除未知头函数,如果头“X-Http-Method-Override”不在其列表中,则请求将永远不会响应。我无法解释为什么它会挂起超过6秒,这是在超时中设置的。。您是否尝试过在工作中调试并一步一步地完成

问候

利亚姆