HTTPWebRequest mit Login

  • VB.NET

    HTTPWebRequest mit Login

    Hallo,

    ich habe hier ein Gerät stehen, über das ich mit dem Browser kommunizieren kann. Unter anderem besteht die Möglichkeit Datenpakete die unterwegs sind mit zu verfolgen.

    Dazu möchte ich in einem Programm mittels webrequest und Login auf "Data-Logging", im Browser zugreifen um mir die Daten, die sonst im Browser in einer List angezeigt werden, direkt bei mir im Programm zu sehen.

    Die Login-Daten werden base64 "verschlüsselt" und die Eingabe von Username und Passwort erfolgt im Browser nicht direkt, sondern es ploppt zuvor eine Login-Form auf.

    Mein bisheriger Code:

    VB.NET-Quellcode

    1. Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.ClickDim username As String = txtUserLogging.Text
    2. Dim password As String = txtPWLogging.Text
    3. If username <> "" And password <> "" ThenDim auth As String = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(username + ":" + password))
    4. 'CookieContainer und Request
    5. Dim cookieCon As New CookieContainerDim request As HttpWebRequest = DirectCast(HttpWebRequest.Create("http://" & cmbIP.Text & "/datalogging.htm"), HttpWebRequest)
    6. 'request.Method = "GET"
    7. 'request.ContentType = "text/html"
    8. request.CookieContainer = cookieCon
    9. request.PreAuthenticate = Truerequest.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested
    10. request.Headers.Add("Authorization", auth)
    11. request.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0"
    12. 'Länge des InhaltsDim byteArr() As Byte = Encoding.Default.GetBytes(auth)
    13. request.ContentLength = byteArr.Length
    14. 'Daten in Stream schreiben und sendenDim dataStream As Stream = request.GetRequestStream()
    15. dataStream.Write(byteArr, 0, byteArr.Length)
    16. 'Server AntwortDim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    17. 'Seitenquelltext auslesenDim reader As New StreamReader(response.GetResponseStream())Dim seitenQuelltext As String = reader.ReadToEnd()
    18. reader.Close()
    19. dataStream.Close()
    20. response.Close()
    21. 'Prüfen ob Login erfolgreich
    22. If seitenQuelltext.Contains("Show logged lines") ThenMessageBox.Show("Login successful!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    23. ElseMessageBox.Show("Login failed!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    24. End If
    25. ElseMessageBox.Show("Enter User and password!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    26. End IfEnd Sub


    Jetzt schmeisst er mir bei:Dim dataStream AsStream = request.GetRequestStream()die Exception: ProtocolViolationException -> Inhaltsteil mit diesem Verbtyp kann nicht gesendet werden.


    Mein gelesener Header:



    ichbineineip/datalogging.htm

    GET /datalogging.htm HTTP/1.1
    Host: ichbineineip

    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Referer: ichbineineip

    Connection: keep-alive

    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Basic realm="device"
    Content-Type: text/html
    Transfer-Encoding: chunked
    Server: Allegro-Software-RomPager/4.01
    Connection: close
    ----------------------------------------------------------
    http://ichbineineip/datalogging.htm

    GET /datalogging.htm HTTP/1.1
    Host: ichbineineip

    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Referer: http://ichbineineip/
    Connection: keep-alive
    Authorization: Basic kOmIsch3rC0d3==

    HTTP/1.1 200 OK
    Content-Type: text/html
    Cache-Control: private
    Expires: Thu, 26 Oct 1995 00:00:00 GMT
    Transfer-Encoding: chunked
    Server: Allegro-Software-RomPager/4.01



    Habe ich noch irgendetwas vergessen?

    Gruß



    /edit: Gelöst: Es muss :

    request.Method =
    WebRequestMethods.Http.Post

    Anstatt "GET"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TimeOut“ ()