HttpWebRequest - pro Seite?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    HttpWebRequest - pro Seite?

    Mahlzeit liebes Forum,

    als ich das letzte mal was "programmiert" habe ist schon bestimmt 3 Jahre her. Nun brauch ein kleines Programmchen.
    Es muss sich auf einer Webseite durch klicken. Das ganze läuft über POST Parameter man muss jede Seite über den Parameter BTN_WEITER=weiter bestätigen. Außerdem muss man als erste auf die Hauptseite um eine SessionID als Cookie bekommt. Sonst hätte ich einfach alle Parameter an die URI gepackt und fertig.
    Leider Nein .. -.-"
    Jetzt habe ich mal meine alten Funktionen aus früheren Projekten ausgepackt und naja. Bleibe immer auf der ersten Seite hängen, da er die Parameter irgenwie nicht bekommen (POST). Muss ich pro Seite und ausfüllen möchte ( über die Post Parameter ) einen neuen Request machen?

    Ich weiß meistens habe ich hier wie Antworten bekommen wie GIDF etc. aber vllt ist ja jemand nettes bei.

    Visual Basic-Quellcode

    1. Imports System.IO, System.Net, System.Text
    2. Imports System.Runtime.InteropServices
    3. Public Class Form1
    4. Public Class getKennzeichen
    5. Dim cookieCon As New CookieContainer
    6. Dim cook As Cookie
    7. Dim request As HttpWebRequest
    8. Dim response As HttpWebResponse
    9. Dim url As String = "....Internetgeschaeftsvorfaelle?"
    10. Public Function getContent(ByVal paramter As String) As String
    11. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(url & paramter)
    12. httpRequest.ContentType = "multipart/form-data; boundary=----WebKitFormBoundaryjBlqbVwvMnTqCYey"
    13. httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    14. httpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
    15. httpRequest.CookieContainer = cookieCon
    16. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    17. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    18. Dim httpContent As String = reader.ReadToEnd
    19. Return httpContent
    20. End Function
    21. Public Function inputContent(ByVal post As String) As String
    22. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(url & post)
    23. httpRequest.Method = "POST"
    24. httpRequest.CookieContainer = cookieCon
    25. httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    26. httpRequest.ContentType = "multipart/form-data; boundary=----WebKitFormBoundaryjBlqbVwvMnTqCYey"
    27. Dim byteArr() As Byte = Encoding.UTF8.GetBytes(post)
    28. httpRequest.ContentLength = byteArr.Length
    29. Dim dataStream As Stream = httpRequest.GetRequestStream()
    30. dataStream.Write(byteArr, 0, byteArr.Length)
    31. response = CType(httpRequest.GetResponse(), HttpWebResponse)
    32. Return New StreamReader(response.GetResponseStream()).ReadToEnd()
    33. End Function
    34. End Class
    35. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    36. ' checkInfos()
    37. With New getKennzeichen
    38. Dim k As String = String.Empty
    39. k = .getContent("AUFRUF=IZU&MANDANT=PIPPP")
    40. If k.Contains(" <fieldset id='EINGABE_VORGANGSAUSWAHL'>") Then
    41. TextBox1.Text = "Erste Seite aufgerufen - Check" & vbNewLine
    42. End If
    43. k = String.Empty
    44. k = .getContent("DATENSCHUTZERKLAERUNG=T&FRAGEGRUNDAUSWAHL=WKZ&BTN_WEITER=weiter")
    45. If k.Contains("") Then
    46. TextBox1.Text = "Zweite Seite aufgerufen - Check" & vbNewLine
    47. End If
    48. End With
    49. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcello“ ()

    Kann da sein, dass ich mit jedem neuen Post den Cookie Container überschreibe? Aber eig. dürfte das nicht das Problem sein. Mein Post funktioniert einfach nicht -.-"

    Marcello schrieb:

    Mein Post funktioniert einfach nicht
    Versuch den Vorgang in einem Browser durchzuführen und zeichne alles auf mit einem HTTP-Analyzer.
    Dann vergleiche die POSTs des Browsers mit deinen handgestrickten.
    Alles andere ist Spekulation.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Habe ich gemacht. Habe die Parameter dann kopiert und eingefügt. Er bleibt immer auf der ersten Seite.
    Mann muss auf der Seite immer das Formular ausfüllen z.B. AUFRUF=IZU&MANDANT=WESEL&DATENSCHUTZERKLAERUNG=T&FRAGEGRUNDAUSWAHL=WKZ&BTN_WEITER=weiter und dann halt immer mit die Eingabe bestätigen um zur nächsten Seite zu kommen.



    So ich mache da kein Geheimnis raus. Ich möchte für mich ein Programm machen, dass für mich Prüft ob ein KFZ Kennzeichen frei ist. Für mich ist es der Kreis Wesel.
    Habe die Parameter mal raus geschrieben.
    Spoiler anzeigen

    User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
    Accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    URL :/Internetgeschaeftsvorfaelle;jsessionid=FE4D988184B991F58851000C14393340

    Base URL um die SessionID als Cookie zu bekommen:/verkehr-igv/servlet/Internetgeschaeftsvorfaelle?AUFRUF=IZU&MANDANT=WESEL

    Seite 1
    _____________
    FRAGEGRUNDAUSWAHL = WKZ
    DATENSCHUTZERKLAERUNG : T
    BTN_WEITER : weiter

    Seite 2
    _____________
    ANREDE : 0
    NAME : Firmenanem
    ORT : Ort
    STRASSE : meinestraße
    BTN_WEITER : weiter

    Seite 3
    _____________
    WKZ_UNTERSCH_Z : MO
    WKZ_ERKENN_Z : P
    WKZ_ZIFFERN : ??
    WKZ_SUCHMERKMAL : NULL
    BTN_WKZSUCHE : suchen


    Im Browser getestet -> Er nimmt Buttons "Weiter" und "suchen" einfach nicht über die URL an. Weiß aber nicht wieso..

    Zitat entfernt, Beiträge zusammengefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcello“ ()

    Hi,

    der Tip petaod ist eigentlich schon das Wesentliche. Untersuche den Post. Beachte es gibt nicht nur PostParams sondern auch RequestHeader.
    Viele Webanwendungen verwenden schon aufgrund der Sicherheit diverse RequestHeader die man immer schicken muss.
    Du könntest die Seite auch hier posten damit man sich ein Bild machen kann.
    Ich bin mir ziemlich sicher das es an irgendwelchen Headern hängt.

    Unabhängig davon das man aus deinem CodeSnippet gar nicht erkennt das du überhaupt einen Post absetzt.. das inputContent mit der post Method wird ja nirgends aufgerufen

    LG

    //EDIT:

    Ok hab mir die Posts angeschaut. Es ist kein normaler Post. Sondern es wird so ein Multipartdata Post verwendet.
    Das heißt es gibt ein gewisses Template und nicht einfach nur Key=Value.
    Du müsstest dir aus dem:
    ------WebKitFormBoundaryTBmddsssfGKhIkCH
    Content-Disposition: form-data; name="FRAGEGRUNDAUSWAHL"

    IFAB
    ------WebKitFormBoundaryTBmddsssfGKhIkCH
    Content-Disposition: form-data; name="DATENSCHUTZERKLAERUNG"

    T
    ------WebKitFormBoundaryTBmddsssfGKhIkCH
    Content-Disposition: form-data; name="BTN_WEITER"

    weiter
    ------WebKitFormBoundaryTBmddsssfGKhIkCH
    Content-Disposition: form-data; name="ZEITSTEMPEL"

    20200804114438
    ------WebKitFormBoundaryTBmddsssfGKhIkCH--

    eine Art Template generieren.
    Zum Beispiel

    VB.NET-Quellcode

    1. Dim PostDataTemplate as String = "\r\n------WebKitFormBoundaryTBmddsssfGKhIkCH\r\nContent-Disposition: form-data; \"{0}\";\r\n\r\n{1}"
    2. poststring as string = string.Format(PostDataTemplate , key, value);

    Das musst du dann für jeden key und value immer aufrufen und das dann als bytearray in den post content schreiben

    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mono“ ()

    Wie ich das mit dem Template etc mache muss ich mir dann gleich mal anschauen. Bisher sieht es für mich wie ein Rätzel aus



    Hi @Mono,

    aber das Template wird wohl so nicht funktionieren, da der Post ein Random Key hat...
    Habe die Seit 1 - zwei mal aufrufen und das kam dabei raus..
    Spoiler anzeigen
    WebKitFormBoundaryb7ZoQPUYObPpAfM4
    WebKitFormBoundaryiUc9s25XyuiG77sJ


    oder bin ich gerade blöd.. -.-"

    //Edit

    VB.NET-Quellcode

    1. Public Function inputContent(ByVal post As String) As String
    2. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(url & post)
    3. httpRequest.Method = "POST"
    4. httpRequest.CookieContainer = cookieCon
    5. httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    6. httpRequest.ContentType = "multipart/form-data; boundary=----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x")
    7. Dim PostDataTemplate As String = "\r\n------WebKitFormBoundary" & DateTime.Now.Ticks.ToString("x") & "\r\nContent-Disposition: form-data; \" {0} \ ";\r\n\r\n{1}" '<-- hier ist noch ein Fehler
    8. post = String.Format(PostDataTemplate, key, value); ' <-- War das so gemeint von dir?? -> Muss ich wirklich jeden Key + Value übergeben und bearbeiten? Man würde es mit einer schleife mache - aber wie wüsste ich jetzt nicht
    9. Dim byteArr() As Byte = Encoding.UTF8.GetBytes(post)
    10. httpRequest.ContentLength = byteArr.Length
    11. Dim dataStream As Stream = httpRequest.GetRequestStream()
    12. dataStream.Write(byteArr, 0, byteArr.Length)
    13. response = CType(httpRequest.GetResponse(), HttpWebResponse)
    14. Return New StreamReader(response.GetResponseStream()).ReadToEnd()
    15. End Function


    Zitat entfernt, Beiträge zusammengefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Ja das müsstest du für jeden key machen.
    Zum Beispiel

    VB.NET-Quellcode

    1. Dim PostDataTemplate As String = "\r\n------WebKitFormBoundary" & DateTime.Now.Ticks.ToString("x") & "\r\nContent-Disposition: form-data; \" {0} \ ";\r\n\r\n{1}" '<-- hier ist noch ein Fehler
    2. post = String.Format(PostDataTemplate, "ZEITSTEMPEL", Now.ToString());
    3. post &= String.Format(PostDataTemplate, "BTN_WEITER", "weiter")
    4. etc


    Hab kein VB.NET zur Verfügung und hab es nur aus dem Kopf geschrieben. Aber also Hilfe reichts ja hoffentlich.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Moin Moin,

    habe es mal versucht. Leider ohne Erfolg.
    Ausgabe der Webseite
    Spoiler anzeigen

    HTML-Quellcode

    1. <body>
    2. <div id="okContainer" class="okWartung">
    3. <div id="okInhalt" accept-charset="UTF-8">
    4. <h2>
    5. <span class="hidden">Fehler: </span>
    6. Der Onlineservice steht nicht zur Verf&uuml;gung
    7. <span>(Status&nbsp;10)</span>
    8. </h2>
    9. <form id="okWeb">
    10. <div id="ANZEIGE_SEITE_WARTUNG" class="seitenHinweis">
    11. <p>
    12. Leider steht unser Onlineservice momentan nicht zur Verf&uuml;gung,
    13. versuchen Sie es bitte zu einem sp&auml;teren Zeitpunkt wieder.
    14. </p>
    15. <p><br/>Vielen Dank f&uuml;r Ihr Verst&auml;ndnis!</p>
    16. </div>
    17. </form>
    18. </div>
    19. </div>
    20. <!-- Der Mandant 'WESEL---WebKitFormBoundary8d8395b124e2e5cContent-DispositionForm-DatanameFRAGEGRUNDAUSWAHLWKZ---WebKitFormBoundary8d8395b124e2e5cContent-DispositionForm-DatanameDATENSCHUTZERKLAERUNGT---WebKitFormBoundary8d8395b124e2e5cContent-DispositionForm-DatanameBTN_WEITERweiter' ist in der igv.properties weder fuer EJB noch fuer OK.KOMM oder ZSocketServer vollstaendig (ServerTyp fehlt) definiert! -->
    21. </body>
    22. </html>

    meine Klasse
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Imports System.Text
    4. Public Class Kennzeichen
    5. #Region "Definiton"
    6. Dim cookieCon As New CookieContainer
    7. Dim cook As Cookie
    8. Dim request As HttpWebRequest
    9. Dim response As HttpWebResponse
    10. Dim keySideOne As New Dictionary(Of String, String)
    11. Dim keySidetwo As New Dictionary(Of String, String)
    12. Dim keySidethree As New Dictionary(Of String, String)
    13. Dim reader As StreamReader
    14. Dim httpCache As String
    15. Dim url As Uri = New Uri("/servlet/Internetgeschaeftsvorfaelle?AUFRUF=IZU&MANDANT=WESEL")
    16. #End Region
    17. Public Function getRequest() As String
    18. request = HttpWebRequest.Create(url)
    19. request.Method = "GET"
    20. request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x")
    21. request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    22. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
    23. request.CookieContainer = cookieCon
    24. response = request.GetResponse()
    25. reader = New StreamReader(response.GetResponseStream)
    26. httpCache = reader.ReadToEnd
    27. Return httpCache
    28. End Function
    29. Public Function postRequest(ByVal PostParamter As String) As String
    30. #Region "POST Parameter"
    31. keySideOne.Add("FRAGEGRUNDAUSWAHL", "WKZ")
    32. keySideOne.Add("DATENSCHUTZERKLAERUNG", "T")
    33. keySideOne.Add("BTN_WEITER", "weiter")
    34. keySidetwo.Add("ANREDE", "0")
    35. keySidetwo.Add("NAME", "XYZ GmbH")
    36. keySidetwo.Add("ORT", "PPPP")
    37. keySidetwo.Add("STRASSE", "PPPP")
    38. keySidetwo.Add("BTN_WEITER", "weiter")
    39. keySidethree.Add("WKZ_UNTERSCH_Z", "M")
    40. keySidethree.Add("WKZ_ERKENN_Z", "P")
    41. keySidethree.Add("WKZ_ZIFFERN", "??")
    42. keySidethree.Add("WKZ_SUCHMERKMAL", "NULL")
    43. keySidethree.Add("BTN_WKZSUCHE", "suchen")
    44. #End Region
    45. '------WebKitFormBoundaryBMNZzZOU0VAgAggF
    46. 'Content-Disposition: Form-Data; name="FRAGEGRUNDAUSWAHL"
    47. 'WKZ
    48. Dim PostDataTemplate As String = "------WebKitFormBoundary" & DateTime.Now.Ticks.ToString("x") & vbNewLine & "Content-Disposition: Form-Data; name={0}" & vbNewLine & "{1}" & vbNewLine
    49. If httpCache.Contains("<fieldset id='EINGABE_VORGANGSAUSWAHL'>") Then
    50. For Each key As KeyValuePair(Of String, String) In keySideOne
    51. PostParamter &= String.Format(PostDataTemplate, key.Key, key.Value)
    52. request = HttpWebRequest.Create(url.ToString & PostParamter)
    53. Next
    54. ElseIf httpCache.Contains("<h2>Weitere Informationen</h2>") Then
    55. For Each key As KeyValuePair(Of String, String) In keySidetwo
    56. PostParamter &= String.Format(PostDataTemplate, key.Key, key.Value)
    57. request = HttpWebRequest.Create(url.ToString & PostParamter)
    58. Next
    59. ElseIf httpCache.Contains("<h2>Auswahl eines Kennzeichens</h2>") Then
    60. For Each key As KeyValuePair(Of String, String) In keySidethree
    61. PostParamter &= String.Format(PostDataTemplate, key.Key, key.Value)
    62. request = HttpWebRequest.Create(url.ToString & PostParamter)
    63. Next
    64. End If
    65. request.Method = "POST"
    66. request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x")
    67. request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    68. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
    69. request.CookieContainer = cookieCon
    70. Dim byteArr() As Byte = Encoding.UTF8.GetBytes(PostParamter)
    71. request.ContentLength = byteArr.Length
    72. Dim dataStream As Stream = request.GetRequestStream()
    73. dataStream.Write(byteArr, 0, byteArr.Length)
    74. response = CType(request.GetResponse(), HttpWebResponse)
    75. Return New StreamReader(response.GetResponseStream()).ReadToEnd()
    76. Return New StreamReader(response.GetResponseStream()).ReadToEnd()
    77. End Function
    78. End Class


    Ausgabe von dem PostParameter:
    ------WebKitFormBoundary8d8395b7d46bbb7
    Content-Disposition: Form-Data; name=FRAGEGRUNDAUSWAHL
    WKZ
    ------WebKitFormBoundary8d8395b7d46bbb7
    Content-Disposition: Form-Data; name=DATENSCHUTZERKLAERUNG
    T
    ------WebKitFormBoundary8d8395b7d46bbb7
    Content-Disposition: Form-Data; name=BTN_WEITER
    weiter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcello“ ()

    Leider ohne Erfolg. PostParamter.

    Mein Post
    Spoiler anzeigen

    Quellcode

    1. ------WebKitFormBoundary8d839df34d6d2fe
    2. Content-Disposition: Form-Data; name="FRAGEGRUNDAUSWAHL"
    3. WKZ
    4. ------WebKitFormBoundary8d839df34d6d2fe
    5. Content-Disposition: Form-Data; name="DATENSCHUTZERKLAERUNG"
    6. T
    7. ------WebKitFormBoundary8d839df34d6d2fe
    8. Content-Disposition: Form-Data; name="BTN_WEITER"
    9. weiter
    10. ------WebKitFormBoundary8d839df34d6d2fe
    11. Content-Disposition: Form-Data; name="ZEITSTEMPEL"
    12. 20200806080328
    13. ------WebKitFormBoundary8d839df37bc0a4b--


    Orginaler Post ( Kopier aus meinem Browser )
    Spoiler anzeigen

    Quellcode

    1. ------WebKitFormBoundaryZuiNAP0jEsqkYDN5
    2. Content-Disposition: Form-Data; name="FRAGEGRUNDAUSWAHL"
    3. WKZ
    4. ------WebKitFormBoundaryZuiNAP0jEsqkYDN5
    5. Content-Disposition: Form-Data; name="DATENSCHUTZERKLAERUNG"
    6. T
    7. ------WebKitFormBoundaryZuiNAP0jEsqkYDN5
    8. Content-Disposition: Form-Data; name="BTN_WEITER"
    9. weiter
    10. ------WebKitFormBoundaryZuiNAP0jEsqkYDN5
    11. Content-Disposition: Form-Data; name="ZEITSTEMPEL"
    12. 20200806074828
    13. ------WebKitFormBoundaryZuiNAP0jEsqkYDN5--


    HTML OutPut der Seite
    Spoiler anzeigen

    HTML-Quellcode

    1. <h2>Auswahl der Vorgangsart</h2>
    2. <form id='okWeb' method='post' action='/verkehr-igv/servlet/Internetgeschaeftsvorfaelle' enctype='multipart/form-data' accept-charset='UTF-8'>
    3. <div id='FEHLER-SEITE_VORGANGSAUSWAHL' class='seitenFehler'>
    4. <p><strong>Ihre Eingaben konnten leider nicht &uuml;bernommen werden, da Sie die Navigationsbuttons Ihres Browsers benutzt haben. Bitte wiederholen Sie Ihre Eingabe und klicken Sie anschlie&szlig;end auf die Buttons (<strong>zur&uuml;ck</strong> oder <strong>weiter</strong>) am Seitenende, um weiter auf der Webseite zu navigieren.</strong></p>
    5. </div>
    6. <fieldset id='EINGABE_VORGANGSAUSWAHL'>
    7. <legend>
    8. <span class='visibleText'>
    9. Was m&ouml;chten Sie tun?
    10. </span>


    d.h. Er ist auf der Seite nur hat wohl nicht ausgewählt? Den Zeitstempel findet man wieder.

    HTML-Quellcode

    1. <div><input type='hidden' name='ZEITSTEMPEL' value='20200806080351' /></div>


    //EDIT
    Habe herausgefunden der Request wird über diese URL gemacht Request URL:
    verkehr-igv.krzn.de/verkehr-ig…orfaelle;jsessionid=DIEID

    Habe jetzt die CookieContainer ausgelesen und die URL angepasst. Funktioniert immer noch nicht. Jetzt kommt dieser HTML Fehler. Glaube es liegt an die action bei der Form, oder?
    Ohne die SeesionID ->

    HTML-Quellcode

    1. <form id='okWeb' method='post' action='/verkehr-igv/servlet/Internetgeschaeftsvorfaelle' enctype='multipart/form-data' accept-charset='UTF-8'>

    Spoiler anzeigen

    HTML-Quellcode

    1. <form id='okWeb' method='post' action='/verkehr-igv/servlet/Internetgeschaeftsvorfaelle;jsessionid=56890147909F2E9B8C195E97FED61B2B------WebKitFormBoundary8d839eb16452cbb%0D%0AContent-Disposition: Form-Data; name=%22FRAGEGRUNDAUSWAHL%22%0D%0AWKZ%0D%0A------WebKitFormBoundary8d839eb16452cbb%0D%0AContent-Disposition: Form-Data; name=%22DATENSCHUTZERKLAERUNG%22%0D%0AT%0D%0A------WebKitFormBoundary8d839eb16452cbb%0D%0AContent-Disposition: Form-Data; name=%22BTN_WEITER%22%0D%0Aweiter%0D%0A------WebKitFormBoundary8d839eb16452cbb%0D%0AContent-Disposition: Form-Data; name=%22ZEITSTEMPEL%22%0D%0A20200806092814%0D%0A------WebKitFormBoundary8d839eb177523dd--' enctype='multipart/form-data' accept-charset='UTF-8'>
    2. <div id='FEHLER-SEITE_VORGANGSAUSWAHL' class='seitenFehler'>
    3. <p><strong>Ihre Eingaben konnten leider nicht &uuml;bernommen werden, da Sie die Navigationsbuttons Ihres Browsers benutzt haben. Bitte wiederholen Sie Ihre Eingabe und klicken Sie anschlie&szlig;end auf die Buttons (<strong>zur&uuml;ck</strong> oder <strong>weiter</strong>) am Seitenende, um weiter auf der Webseite zu navigieren.</strong></p>
    4. </div>

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Marcello“ ()

    Hi,

    es müsste ungefähr so gehen:
    Spoiler anzeigen


    Deine Klasse:

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Imports System.Text
    4. Public Class Kennzeichen
    5. #Region "Definiton"
    6. ReadOnly _cookieCon As New CookieContainer
    7. Dim _request As HttpWebRequest
    8. Dim _response As HttpWebResponse
    9. Dim ReadOnly _keySideOne As New Dictionary(Of String, String)
    10. Dim ReadOnly _keySidetwo As New Dictionary(Of String, String)
    11. Dim ReadOnly _keySidethree As New Dictionary(Of String, String)
    12. Dim _httpCache As String
    13. Private ReadOnly _boundary As String = Now.Ticks.ToString("x")
    14. Dim ReadOnly _url As Uri = New Uri("https://verkehr-igv.krzn.de/verkehr-igv/servlet/Internetgeschaeftsvorfaelle?AUFRUF=IZU&MANDANT=WESEL")
    15. Dim ReadOnly _postUrl As New Uri("https://verkehr-igv.krzn.de/verkehr-igv/servlet/Internetgeschaeftsvorfaelle")
    16. Public Sub New()
    17. _keySideOne.Add("FRAGEGRUNDAUSWAHL", "WKZ")
    18. _keySideOne.Add("DATENSCHUTZERKLAERUNG", "T")
    19. _keySideOne.Add("BTN_WEITER", "weiter")
    20. _keySidetwo.Add("ANREDE", "0")
    21. _keySidetwo.Add("NAME", "XYZ GmbH")
    22. _keySidetwo.Add("ORT", "PPPP")
    23. _keySidetwo.Add("STRASSE", "PPPP")
    24. _keySidetwo.Add("BTN_WEITER", "weiter")
    25. _keySidethree.Add("WKZ_UNTERSCH_Z", "M")
    26. _keySidethree.Add("WKZ_ERKENN_Z", "P")
    27. _keySidethree.Add("WKZ_ZIFFERN", "??")
    28. _keySidethree.Add("WKZ_SUCHMERKMAL", "NULL")
    29. _keySidethree.Add("BTN_WKZSUCHE", "suchen")
    30. End Sub
    31. #End Region
    32. Public Function GetRequest() As String
    33. _request = HttpWebRequest.Create(_url)
    34. _request.Method = "GET"
    35. _request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    36. _request.CookieContainer = _cookieCon
    37. _response = _request.GetResponse()
    38. _httpCache = New StreamReader(_response.GetResponseStream).ReadToEnd
    39. Return _httpCache
    40. End Function
    41. Public Function PostRequest(timestamp As String) As String
    42. Dim postParamter As String = String.Empty
    43. Dim postDataTemplate As String = vbCrLf & "------WebKitFormBoundary" & _boundary & vbCrLf & "Content-Disposition: form-data; name=""{0}""" & vbCrLf & vbCrLf & "{1}"
    44. If _httpCache.Contains("<fieldset id='EINGABE_VORGANGSAUSWAHL'>") Then
    45. For Each key As KeyValuePair(Of String, String) In _keySideOne
    46. postParamter &= String.Format(postDataTemplate, key.Key, key.Value)
    47. Next
    48. ElseIf _httpCache.Contains("<h2>Weitere Informationen</h2>") Then
    49. For Each key As KeyValuePair(Of String, String) In _keySidetwo
    50. postParamter &= String.Format(postDataTemplate, key.Key, key.Value)
    51. Next
    52. ElseIf _httpCache.Contains("<h2>Auswahl eines Kennzeichens</h2>") Then
    53. For Each key As KeyValuePair(Of String, String) In _keySidethree
    54. postParamter &= String.Format(postDataTemplate, key.Key, key.Value)
    55. Next
    56. End If
    57. postParamter &= String.Format(postDataTemplate, "ZEITSTEMPEL", timestamp)
    58. _request = HttpWebRequest.Create(_postUrl.ToString)
    59. _request.Method = "POST"
    60. _request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundary" + _boundary
    61. _request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
    62. _request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
    63. _request.CookieContainer = _cookieCon
    64. _request.Referer = "https://verkehr-igv.krzn.de/verkehr-igv/servlet/Internetgeschaeftsvorfaelle?AUFRUF=IZU&MANDANT=WESEL"
    65. Dim byteArr() As Byte = Encoding.UTF8.GetBytes(postParamter)
    66. _request.ContentLength = byteArr.Length
    67. Dim dataStream As Stream = _request.GetRequestStream()
    68. dataStream.Write(byteArr, 0, byteArr.Length)
    69. _response = CType(_request.GetResponse(), HttpWebResponse)
    70. _httpCache = New StreamReader(_response.GetResponseStream()).ReadToEnd()
    71. Return _httpCache
    72. End Function
    73. End Class

    Aufruf:

    VB.NET-Quellcode

    1. Dim k As New Kennzeichen
    2. Dim s As String = k.GetRequest()
    3. Dim timestamp = New Regex("[0-9]{14}").Match(s).Value
    4. Dim r1 = k.PostRequest(timestamp)
    5. Dim r2 = k.PostRequest(timestamp)
    6. Dim r3 = k.PostRequest(timestamp)

    Das ist meine Signatur und sie wird wunderbar sein!