Über Console Webseiten inhalt auslesen und abfrage senden
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.
-
-
-
-
Hallo,
VB.NET-Quellcode
Nun würde ich gerne Formular ausfüllen
Dann soll Submit Button auf der Seite geklickt werden.
Da ich kein Webbrowser anwenden möchte, wüsste ich jetzt nicht wie ich das machen soll.
Ich bitte um Hilfe
mfg -
Das ist meine Signatur und sie wird wunderbar sein!
-
-
Ich muss ehrlich gestehen, dass ich damit garnicht klar komme.
Ok. Vielleicht beschreibst du mal näher, womit du nicht klar kommst bzw. was du nicht verstehst?
Ich vermute dir fehlen die Grundlagen zum Verständnis, wie HTTP funktioniert?
VB.NET-Quellcode
- Dim request As WebRequest = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx ")
- ' Set the Method property of the request to POST.
- request.Method = "POST"
- ' Create POST data and convert it to a byte array.
- Dim postData As String = "This is a test that posts this string to a Web server."
- Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
Das ist im Grunde der entscheidende Teil. Es ist eigentlich alles schon gemacht. Das Einzige was dir jetzt wahrscheinlich nicht klar ist, was soll postData sein. Was kommt da rein???
Nun. Bei jeder Form die du (wie du es normalerweise kennst über den Browser) an einen Webserver schickst, werden die von dir eingebenen Daten ja irgendwie an den Webserver übermittelt. Es gibt da 2 Methoden.
POST und GET.
Bei GET werden die Daten einfach an die URL gehangen. Also zum Beispiel eine Textbox mit dem Namen Search wird dann angehangen als /ieineseite.php?Search=Wiegehtdas
Bei POST werden die Daten allerdings im HTTP Body mitgesendet. Daher müssen Sie als Byte an den Request Stream angehängt werden.
VB.NET-Quellcode
- ' Set the ContentType property of the WebRequest.
- request.ContentType = "application/x-www-form-urlencoded"
- ' Set the ContentLength property of the WebRequest.
- request.ContentLength = byteArray.Length
- ' Get the request stream.
- Dim dataStream As Stream = request.GetRequestStream()
- ' Write the data to the request stream.
- dataStream.Write(byteArray, 0, byteArray.Length)
- ' Close the Stream object.
- dataStream.Close()
- ' Get the response.
Auf den ContentType bzw ContentLength geh ich mal nicht näher ein (Length ist denk ich eh klar). Aber er ist erforderlich um festzulegen, welchen MIME Type der Body für den POST Request hat. ContentType und Length sind HTTP Header. Übernimm es einfach, und wenn du mehr darüber wissen willst, dann belies dich. An der Stelle ist der Request fertig und du kannst diesen als Streamobjekt lesen um den Content, also im Beispiel "search=Wiegehtdas" an den Request anzuhängen. Danach wird der komplette Request an den Webserver gesendet:
Dieser weiß dann anhand des Contenttypes, des Requesttypes und der Contentlength, wie er die Daten zu interpretieren hat und im PHP Script oder wie auch immer das Serverseitig verarbeitet wird, kann der Webserver mit den Daten arbeiten und entsprechend eine neue Webseite zurücksenden. Diese kannst du nun in der Console anzeigen, auch wenn diese nicht wirklich dafür geeignet ist, da Sie ja keine HTML oder JavaScript Engine hat, um die Webseite Userfriendly darzustellen. Du siehst halt den kompletten Response.
VB.NET-Quellcode
- ' Get the stream containing content returned by the server.
- dataStream = response.GetResponseStream()
- ' Open the stream using a StreamReader for easy access.
- Dim reader As New StreamReader(dataStream)
- ' Read the content.
- Dim responseFromServer As String = reader.ReadToEnd()
- ' Display the content.
- Console.WriteLine(responseFromServer)
LGDas ist meine Signatur und sie wird wunderbar sein!Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mono“ ()
-
Hi,
Super erklärung. Einfach klasse. Es hat geklappt.
Nun hätte ich eine frage zum filtern:
Es wird zwar ausgelesen und angezeigt ... nun möchte ich gerne den Inhalt
Result + output
Wie kann ich das am besten machen ?
mfg
-
-
Nun möchte ich gerne genau den Inhalt wieder ausgeben
Die wird dann bei der Abfrage mitgeteilt.
kurz gesagt, möchte ich den Output html wieder ausgeben
die beginnt mit <h2>Log</h2> <pre>text... etc ...
mfg
Ich muss mich kurz korrigieren. Wie kann ich denn alle html tags rausschneiden?
Push nach 4 Stunden? Dafür gibt es die "Bearbeiten"-Funktion.
=> Beiträge zusammengefügt // ~Trade
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()
-
-
--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
-
livius91 schrieb:
Du musst dann genau diese Exception abfangen.
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
livius91 schrieb:
wenn wirklich ein fehler auftaucht
Allerdings ist das kein Grund, pauschal alle Exceptions abzufangen.
Z.B. ist es sinnvoll, Access-Exceptions abzufangen, wenn Du alle Dateien der Festplatte auflisten willst, denn in bestimmten Verzeichnissen hast Du keine Zugriffsrechte.
Überleg Dir, ob die farbliche Codierung ggf. eine Fehlinformation darstellt, an meinem Beispiel wäre das z.B. der Unterschied zwischen "Ich habe auf dieses Verzeichnis keinen Zugriff" und "Die von mir gesuchte Datei ist nicht vorhanden".Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
Richtig, du musst die System.Net.WebException abfangen. Anschliessend kannst du dessen Status abfragen und darauf reagieren.
PS: Du kannst natürlich auch den ExceptionStatus in ein (HttpWebResponse) Casten um so an den HttpStatusCode zu kommen, damit hättest du dann z.B. '403' bei Forbidden.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Fakiz“ ()
-
hi,
ich weiss nicht was ich da gemacht habe ..nun will schleife nicht richtig funktionieren
VB.NET-Quellcode
- Dim Request As HttpWebRequest = CType(WebRequest.Create(Item.Text), HttpWebRequest)
- Request.Method = "POST"
- Request.ContentType = "application/x-www-form-urlencoded"
- Dim Post As String = "textbox=" & Me.txtbox.Text
- 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()
- Dim reader As New StreamReader(DataStream)
- Dim ServerResponse As String = reader.ReadToEnd()
- reader.Close()
- DataStream.Close()
- Response.Close()
- Next
Es soll in der Listview bzw. Listbox in schleife alles prüfen
Nun geht es nicht mehr
Aber wenn ich msgbox
nach
einfüge, dann gehts.
mfg
-
Ich kann im moment nur erahnen was du meinst, die schleife läuft nur wenn du gleich danach eine MessageBox einbaust? Ich dachte du willst das ganze über Konsole ausgeben Bist du nun in winforms?
Spoiler anzeigen
Benutzung der unten stehenden MethodeSendWebRequest(string url)
VB.NET-Quellcode
- 'Die Liste repräsentiert deine Listbox oder was auch immer...
- Dim targetUrls As New List(Of String)()
- targetUrls.Add("http://www.google.de")
- targetUrls.Add("http://www.wieistmeineip.de/")
- targetUrls.Add("http://get-ip.de/de/faq/what-is-my-user-agent")
- For Each s As String In targetUrls
- If SendWebRequest(s) Then
- ' alles ok...
- Else
- ' fehler...
- End If
- Next
Methode fürt den Webrequest aus und gibt True zurück wenn erfolgreich, false wenn fehlgeschlagen,
ich habe keine wie String.Format bei vb aussieht aber geben müßte es das entzwischen.
VB.NET-Quellcode
- Private Function SendWebRequest(url As String) As Boolean
- ' Post daten erstellen
- Dim bPostData As Byte() = Encoding.UTF8.GetBytes("page=index")
- ' Webrequest erstellen
- Dim request As WebRequest = HttpWebRequest.Create(url)
- request.ContentType = "application/x-www-form-urlencode"
- request.Method = WebRequestMethods.Http.Post
- request.ContentLength = bPostData.Length
- ' PostDaten schreiben
- Using stream As Stream = request.GetRequestStream()
- stream.Write(bPostData, 0, bPostData.Length)
- End Using
- Try
- ' Request senden
- Using response As WebResponse = request.GetResponse()
- Using sr As New StreamReader(response.GetResponseStream())
- ' Server hat geantwortet...
- Console.WriteLine("[ + ] Server antwort von: {0}" & vbLf & "{1}" & vbLf, url, sr.ReadToEnd())
- End Using
- End Using
- Catch ex As WebException
- ' Server antwortet nicht, msg ausgeben...
- If ex.Status = WebExceptionStatus.ConnectFailure Then
- Console.Write("[")
- Console.ForegroundColor = ConsoleColor.Red
- Console.Write("!")
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write("]")
- Console.WriteLine(" Der Server unter {0} antwortet nicht!" & vbLf & "Status Code: {1}", url, CInt(ex.Status))
- End If
- Return False
- End Try
- Return True
- End Function
-
Ähnliche Themen
-
5 Benutzer haben hier geschrieben
- livius91 (12)
- Fakiz (5)
- Mono (3)
- RodFromGermany (2)
- petaod (2)