Autor |
Beitrag |
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Sa 21.08.10 20:59
Hallo Leute,
hoffe das ich hier richtig bin.
Ist es möglich eine Windows Form zu schreiben die ohne den webBrowser1 auf eine Seite zugreift ?
Wenn ja, wie sieht so was aus und woran kann ich erkennen das ich mit der Seite verbunden bin ?
gruß Alan
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 21.08.10 21:06
Du kannst dir den Quelltext der Seite anderweitig ziehen.
Aber was meinst du mit verbunden?
Es wird immer eine Anfrage an den Server geschickt und du bekommst die Antwort, fertig.
Es sei denn du redest von sowas wie AJAX und Skripten, das geht nur im WebBrowser Objekt. Die Anfragen kannst du aber auch selbst machen.
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Sa 21.08.10 21:57
Ich hatte ihrgendwo mal gelesen das so etwas mit HttpWebRequest oder SqlClient geht.
Oder habe ich da was falsch verstanden ?
gruß Alan
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 21.08.10 22:01
AlanWake hat folgendes geschrieben : | Ich hatte ihrgendwo mal gelesen das so etwas mit HttpWebRequest oder SqlClient geht. |
Was hat das eine mit dem anderen zu tun?
Wie die Namen schon sagen ist das erste eine Klasse um Web Anfragen über Http zu stellen, das zweite ein Client für einen SQL Server...
Über HttpWebRequest kannst du auf Webseiten zugreifen, ja. In der Dokumentation steht auch wie.
Für diesen Beitrag haben gedankt: AlanWake
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 21.08.10 22:03
AlanWake hat folgendes geschrieben : | Ich hatte ihrgendwo mal gelesen [...] |
Hört sich verdächtig nach dem Thema unter deinem an . [3.5] kompletten quelltext ohne website zu laden auslesen
_________________ >λ=
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Sa 21.08.10 22:19
Ich habe keine Ahnung deshalb frage ich
Ich wollte ein Programm schreiben mit dem ich auf meine Homepage, mit meinem Daten zugreifen kann, wenn dann der Login funktioniert hat soll dann in einer Textbox stehen: Login erfolgreich !
Geht das ohne einen webBrowser zu benutzen ?
gruß Alan
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 21.08.10 22:23
Nun ja, dann musst du dein Loginskript mit den entsprechenden Logindaten aufrufen. Je nachdem was das dann macht, bekommst du dann mit der Antwort eine Session-ID oder Cookies oder ähnliches um bei weiteren Seitenaufrufen dann das Login zu benutzen.
Wie das passiert, musst du schon selbst wissen, es ist ja deine Seite...
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Sa 21.08.10 22:27
jaenicke hat folgendes geschrieben : | Wie das passiert, musst du schon selbst wissen, es ist ja deine Seite... |
Das ist mir schon klar aber ich weiß nicht wie so ein Skript in C# aussehen soll oder wie ich so etwas schreiben/anfangen kann !?
gruß Alan
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1742
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 21.08.10 23:30
Hast du denn einmal das Beispiel und die Methoden in der Dokumentation angeschaut?
Wo fehlts denn? An den Kenntnissen über HTTP? Oder der reinen Umsetzung? Und wenn bei der Umsetzung, was möchtest du denn schicken in Post usw.?
Für diesen Beitrag haben gedankt: AlanWake
|
|
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 21.08.10 23:32
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: So 22.08.10 02:09
@ jaenicke: Ich habe so etwas noch nie vorher gemacht also fehlt es an Kenntnissen in beiden Bereichen
@ Yogu: Ich habe mir mal ein Test Forum erstellt: alanwake.phpbb8.de/ucp.php?mode=login
Ich wollte es so machen das ich in eine Textbox den URL der Seite eingebe und in 2 andere Textboxen mein Username und mein Passwort
Und das in einem Label angezeigt wird wenn der Login erfolgreich wahr.
Ist so etwas machbar ohne einen webBrowser ?
gruß Alan
|
|
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 22.08.10 13:33
Ah, endlich etwas konkretes.
Die folgende Methode führt eine HTTP-Anfrage durch und sendet gleichzeitig POST-Daten. Die sind wichtig, weil die Login-Daten über POST versendet werden.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| private string postRequest(string url, Dictionary<string, string> postData) { string postString = ""; foreach (string key in postData.Keys) { string value = postData[key]; if (postString != "") postString += "&"; postString = HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value); }
UTF8Encoding encoding = new UTF8Encoding (); byte[] data = encoding.GetBytes (postString);
WebRequest request = WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; Stream stream = request.GetRequestStream(); stream.Write(data, 0, data.Length); stream.Close();
Stream responseStream = request.GetResponse().GetResponseStream(); StreamReader reader = new StreamReader(responseStream, new UTF8Encoding()); string response = reader.ReadToEnd(); responseStream.Close();
return response; } |
Aufrufen kannst du die Methode so:
C#-Quelltext 1: 2: 3: 4: 5:
| Dictionary<string, string> postData = new Dictionary<string,string>(); postData["login"] = "login"; postData["username"] "(benutzername)"; postData["pass"] = "(passwort)"; string response = postRequest("http://alanwake.phpbb8.de/ucp.php?mode=login", postData); |
Dann hast du in der Variable response den Quellcode der Datei und kannst ihn nach einem Text wie "Login erfolgreich" durchsuchen.
Als ich den Code getestet habe, bin ich allerdings auf einen seltsamen Fehler gestoßen, der mir vorher noch nie begegnet ist: Der HTTP-Fehler 417 ("Expectation failed"). Das bedeutet, dass etwas mit dem Expect-Header nicht stimmt, von dem ich auch noch nie gehört habe. Vielleicht weiß jemand anderes weiter...
Grüße,
Yogu
Für diesen Beitrag haben gedankt: AlanWake
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 22.08.10 13:48
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: So 22.08.10 17:04
@ Yogu: Beim ersten Quellcode erkennt mein C# HttpUtility nicht an
Ich benutze die beiden usings:
using System.IO;
using System.Net;
Aber er er erkennt es trozdem nicht an, welches using muss ich da benutzen ?
gruß Alan
|
|
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 22.08.10 17:31
Hups, ich hab mir eigentlich vorgenommen, das dazuzuschreiben
Du musst den Verweis System.Web hinzufügen (Achtung, das Zielframework darf nicht 4.0 Client Pofile sein und den Namespace System.Web einbinden.
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: So 22.08.10 18:09
@ Yogu: Ich habe jetzt using System.Web; hinzugefügt aber mein C# erkennt immer noch nicht HttpUtility an
Ich habe C# 2010 Express mit dem net framework 4.0, ist das jetzt ein Hindernis für den Code ?
gruß Alan
ps. Das ist mein Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Web;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string postRequest(string url, Dictionary<string, string> postData) { string postString = ""; foreach (string key in postData.Keys) { string value = postData[key]; if (postString != "") postString += "&"; postString = HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value); }
UTF8Encoding encoding = new UTF8Encoding(); byte[] data = encoding.GetBytes(postString);
WebRequest request = WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; Stream stream = request.GetRequestStream(); stream.Write(data, 0, data.Length); stream.Close();
Stream responseStream = request.GetResponse().GetResponseStream(); StreamReader reader = new StreamReader(responseStream, new UTF8Encoding()); string response = reader.ReadToEnd(); responseStream.Close();
return response; } private void button1_Click(object sender, EventArgs e) { Dictionary<string, string> postData = new Dictionary<string,string>(); postData["login"] = "login"; postData["username"] = "(benutzername)"; postData["pass"] = "(passwort)"; string response = postRequest("http://alanwake.phpbb8.de/ucp.php?mode=login", postData); } } } |
|
|
Trashkid2000
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: So 22.08.10 18:49
Du musst unter Verweise einen Verweis auf die Assembly System.Web hinzufügen. Dann klappt das schon.
Aber beim Test dann:
Der Remoteserver hat einen Fehler zurückgegeben: (417) Expectation Failed.
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: So 22.08.10 19:18
Ihrgendwie finde ich das nicht
Wenn ich ein neues Projek erstellt habe gehe ich auf das Feld, Projektmappen-Explorer und dann auf Verweise mit der rechten Maustaste und auf Verweis hinzufügen.
Im .NET und COM habe ich die Listen durchsucht aber das einzige was ich mit WEB gefunden habe wahr: webvw 1.0 Type Libary
gruß Alan
|
|
Trashkid2000
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: So 22.08.10 19:30
Unter .NET, und dannziemlich am Ende der Liste System.Web.
Wenn sie nicht da ist, hast Du sie unter Verweise schon drin !?
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: So 22.08.10 20:35
Ich habe es immer noch nicht gefunden
Ich habe aus der Liste die 2 Systems hinzugefügt die ich rot makiert habe: www5.pic-upload.de/2....10/w27d8pzy5ne8.jpg
Aber C# erkennt immer noch nicht HttpUtility an
gruß Alan
|
|