Мне нужно подключиться к локальному веб-серверу с помощью Visual Basi c NET. Веб-сервер имеет TLS 1.2. Сначала мне нужно подключиться к странице с именем пользователя и паролем, а затем мне нужно взять некоторые значения со страницы, которая будет открыта. Я знаю, что с сервером все в порядке, потому что могу подключиться со скриптом python. Итак, код Visual Basi c, который не работает:
Imports System.Net
Imports System.Net.Http
Imports Newtonsoft.Json
Public Class Main
Dim Red As Integer
Private Shared ReadOnly client As HttpClient
Public Function AcceptAllCertificates(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
Return True
End Function
Shared Sub New()
client = New HttpClient()
End Sub
Private Function GetSessionID() As String
Dim form As MultipartFormDataContent = New MultipartFormDataContent()
form.Add(New StringContent("Login"), "login")
form.Add(New StringContent("Username"), "user")
form.Add(New StringContent("Pasword"), "pwd")
Try
Dim response As HttpResponseMessage = client.PostAsync("main.app", form).Result
Dim content As String = response.Headers.GetValues("Set-Cookie").FirstOrDefault()
Dim parts() As String = content.Split(";")
Dim value As String = parts(0)
If value.Substring(0, 9) = "SessionId" Then
Return value.Substring(10)
End If
Catch exception As Exception
End Try
Throw New Exception("Can't find the session ID")
End Function
Private Function GetTimeStamp() As Integer
Return DateTime.UtcNow.Subtract(New DateTime(1970, 1, 1)).TotalSeconds()
End Function
Private Sub GetValue(ByVal sessionID As String)
Dim response As HttpResponseMessage = client.GetAsync("ajax.app?SessionId=" & sessionID & "&service=getDp&plantItemId=00000&_=" & GetTimeStamp()).Result
Dim data = JsonConvert.DeserializeAnonymousType(response.Content.ReadAsStringAsync().Result, New With {Key .value = "", .unit = ""})
Text1.Text = data.value & " " & data.unit
End Sub
Private Sub Connect_Click(sender As Object, e As EventArgs) Handles Connect.Click
Try
Dim sessionID As String = GetSessionID()
txtSessionID.Text = sessionID
GetTemperature(sessionID)
Catch exception As Exception
MessageBox.Show(exception.ToString())
End Try
End Sub
Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertificates
'ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
client.BaseAddress = New Uri("https://xxx.xxx.xxx.xxx/)
End Sub
И код Python, который работает:
import requests
urllib3 = requests.urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
session = requests.session()
session.verify=False
response = session.get('https://xxx.xxx.xxx.xxx/main.app?user=Username&pwd=Password')
response = session.get('https://xxx.xxx.xxx.xxx/ajax.app?service=getDp&plantItemId=00000&_=')
print(response.text)
Спасибо за помощь.