visualbasic
Goto Top

Nach gesendeter PostData auf Server-Antwort warten

Zum Glück habe ich wenigstens das Postdata schon und muss nur noch das mit dem Warten hinbekommen

Hallo
Ich habe eine PostData erstellt:

Dim Request As HttpWebRequest = CType(WebRequest.Create("*********************window.html?bk=79139b87d1056cedb0a4aff6d5d5da51"), HttpWebRequest)  
        Request.Method = "POST"  
        Request.ContentType = "application/x-www-form-urlencoded"  
        Dim Post As String = "caller=" & number  
        Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
        Request.ContentLength = byteArray.Length
        Dim DataStream As Stream = Request.GetRequestStream()
        DataStream.Write(byteArray, 0, byteArray.Length)
        DataStream.Close()
        Dim Response As HttpWebResponse = Request.GetResponse()
        DataStream = Response.GetResponseStream()

Jetzt möchte ich auf die Server-Anwort warten.

Weil mit <code typ="vb>Dim Response As HttpWebResponse = Request.GetResponse()
DataStream = Response.GetResponseStream()
Dim reader As New StreamReader(DataStream)
Dim ServerResponse As String = reader.ReadToEnd()
reader.Close()
DataStream.Close()
Response.Close()

If InStr(ServerResponse, "Sie wurden erfolgreich angemeldet.") Then
MessageBox.Show("Login OK")
Else
MessageBox.Show("Login nicht OK")
End If scheinst ja nicht zu gehen...

Was soll ich dann machen?

Content-ID: 191753

Url: https://administrator.de/contentid/191753

Ausgedruckt am: 15.11.2024 um 21:11 Uhr

MonoTone
MonoTone 12.10.2012 aktualisiert um 09:29:00 Uhr
Goto Top
Was geht denn nicht?
Eventuell beschäftigst du dich mal mit "Debugging".
Lass dir mal den Serverresponse ausgeben.

Was du beachten solltest ist, dass nach dem Senden der Postdaten vom Webserver im Normalfall Cookies mitgesendet werden. Bei weiteren Anfragen werden diese benötigt (darüber wirst du bzw. deine Anfrage identifiziert)
Das heisst. Du logst dich ein via PostRequest und du erhältst ein (paar) Cookie(s).
Möchtest du dann Daten aus der Website auslesen, welche nur nach dem Login zur Verfügung stehen, dann machst du das via GET Request UND sendest deine empfangenen (Session) Cookies mit.

Hier mal ein Bsp:

        Dim POSTData As String = "user=mono&pass=123"  
        Dim strURL As String = "http://www.website.de/login.php"  
        Dim Request As Net.HttpWebRequest = Net.HttpWebRequest.Create(strURL)
        Request.CookieContainer = New Net.CookieContainer()
        Request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"  
        Request.Method = "POST"  
        Request.AllowAutoRedirect = True
        Request.ContentType = "application/x-www-form-urlencoded"  
        Dim encoding As New System.Text.ASCIIEncoding() 'Use UTF8Encoding for XML requests  
        Dim postByteArray() As Byte = encoding.GetBytes(POSTData)
        Request.ContentLength = postByteArray.Length
        Dim postStream As IO.Stream = Request.GetRequestStream()
        postStream.Write(postByteArray, 0, postByteArray.Length)
        postStream.Close()

        Dim Response As Net.HttpWebResponse = Request.GetResponse
        Response.Cookies = Request.CookieContainer.GetCookies(Request.RequestUri)

        Dim Reader As IO.StreamReader = New IO.StreamReader(Response.GetResponseStream)
        'Ausgabe des Responses  
        Debug.Print(Reader.ReadToEnd())
        'ausgabe der Cookies  
        For Each SetCookie As Net.Cookie In Response.Cookies
            Debug.Print(SetCookie.Name & ": " & SetCookie.Value)  
        Next
visualbasic
visualbasic 12.10.2012 um 14:14:41 Uhr
Goto Top
Zitat von @MonoTone:
Was geht denn nicht?
Eventuell beschäftigst du dich mal mit "Debugging".
Die Taste F5 ist mir bekannt.

>         Dim POSTData As String = "user=mono&pass=123"  
>         Dim strURL As String = "http://www.website.de/login.php"  
>         Dim Request As Net.HttpWebRequest = Net.HttpWebRequest.Create(strURL)
>         Request.CookieContainer = New Net.CookieContainer()
>         Request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"  
>         Request.Method = "POST"  
>         Request.AllowAutoRedirect = True
>         Request.ContentType = "application/x-www-form-urlencoded"  
>         Dim encoding As New System.Text.ASCIIEncoding() 'Use UTF8Encoding for XML requests  
>         Dim postByteArray() As Byte = encoding.GetBytes(POSTData)
>         Request.ContentLength = postByteArray.Length
>         Dim postStream As IO.Stream = Request.GetRequestStream()
>         postStream.Write(postByteArray, 0, postByteArray.Length)
>         postStream.Close()
> 
>         Dim Response As Net.HttpWebResponse = Request.GetResponse
>         Response.Cookies = Request.CookieContainer.GetCookies(Request.RequestUri)
> 
>         Dim Reader As IO.StreamReader = New IO.StreamReader(Response.GetResponseStream)
>         'Ausgabe des Responses  
>         Debug.Print(Reader.ReadToEnd())
>         'ausgabe der Cookies  
>         For Each SetCookie As Net.Cookie In Response.Cookies
>             Debug.Print(SetCookie.Name & ": " & SetCookie.Value)  
>         Next
> 
> 

Vielen Dank, an die Cookies habe ich gar nicht gedacht!
Also, der obige Code ist zum Login, oder?
Was muss ich dann jetzt machen, nachdem ich durch den Login die Cookies bekommen hab; wenn ich nochmal einen Postdata senden will (als eingeloggter USER) ?

Gruß
MonoTone
MonoTone 12.10.2012 um 14:39:55 Uhr
Goto Top
F5 <> Debugging!
Dies ist lediglich die Taste um das Debugging zu starten.

Ich habe oben bereits beschrieben, wie du dann vorgehen musst.
visualbasic
visualbasic 12.10.2012 um 14:43:16 Uhr
Goto Top
Zitat von @MonoTone:
F5 <> Debugging!
Dies ist lediglich die Taste um das Debugging zu starten.
Ich schau dann auch nach dem Fehler / den Fehlern.

Ich habe oben bereits beschrieben, wie du dann vorgehen musst.
Ja schon, aber wie sende ich die Cookies mit?
Und wenn ich gar keinen GET, sondern ein POST machen will?

Gruß
MonoTone
MonoTone 12.10.2012 um 14:52:47 Uhr
Goto Top
Du kannst einem Request einen Cookiecontainer mitgeben, wie in dem Beispiel ersichtlich.
Es steht alles da.
Das einzige was du noch tun musst ist selber logisch denken und die Dinge verknüpfen.
visualbasic
visualbasic 12.10.2012 um 16:04:13 Uhr
Goto Top
Zitat von @MonoTone:
Du kannst einem Request einen Cookiecontainer mitgeben, wie in dem Beispiel ersichtlich.
Es steht alles da.
Das einzige was du noch tun musst ist selber logisch denken und die Dinge verknüpfen.
Danke; ich habe jetzt rumprobiert und habs noch immer nicht -face-sad sorry

Gruß