Autor Beitrag
AlanWake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.08.10 21:06 
Du kannst dir den Quelltext der Seite anderweitig ziehen.

Aber was meinst du mit verbunden? :gruebel:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.08.10 22:01 
user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte ihrgendwo mal gelesen das so etwas mit HttpWebRequest oder SqlClient geht.
Was hat das eine mit dem anderen zu tun? :gruebel:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 21.08.10 22:03 
user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Sa 21.08.10 22:27 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 21.08.10 23:32 
Wie sieht denn das serverseitige Script aus? Was würde man im Browser machen, um sich anzumelden? Ruft man einfach eine URL auf und bekommt dann angezeigt, ob der Login erfolgreich war? Dann kannst du diese Methode benutzen (achtung, geklaut ;)):
user profile icon0odarkio0 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
3:
                // Quelltext holen
                WebClient web = new WebClient();
                string quelltext = web.DownloadString(url);

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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.

ausblenden volle Höhe C#-Quelltext
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<stringstring> postData) {
      // Die POST-Daten in die Form "x-www-form-urlencoded" bringen - also wie bei Daten nach ? bei URLs
      string postString = "";
      foreach (string key in postData.Keys) {
        string value = postData[key];
        if (postString != "")
          postString += "&";
        postString = HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value);
      }

      // Den String in UTF8-Bytes encodieren
            UTF8Encoding encoding = new UTF8Encoding ();
            byte[] data = encoding.GetBytes (postString);

      // Die Klasse WebRequest erlaubt es, eine Http-Anfrage durchzuführen. 
      WebRequest request = WebRequest.Create(url);

      // Wir brauchen für die Login-Daten die Methode POST
      request.Method = "POST";

      // Nun schreiben wir die POST-Daten in die Anfrage
      request.ContentType = "application/x-www-form-urlencoded";
      request.ContentLength = data.Length;
      Stream stream = request.GetRequestStream();
      stream.Write(data, 0, data.Length);
      stream.Close();

      // Gibt die Antwort (also den Seitenquelltext) als String zurück
      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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
      Dictionary<stringstring> 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 22.08.10 13:48 

_________________
>λ=

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 22.08.10 17:31 
Hups, ich hab mir eigentlich vorgenommen, das dazuzuschreiben :oops:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden volle Höhe C#-Quelltext
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<stringstring> postData)
        {
            // Die POST-Daten in die Form "x-www-form-urlencoded" bringen - also wie bei Daten nach ? bei URLs
            string postString = "";
            foreach (string key in postData.Keys)
            {
                string value = postData[key];
                if (postString != "")
                    postString += "&";
                postString = HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value);
            }

            // Den String in UTF8-Bytes encodieren
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] data = encoding.GetBytes(postString);

            // Die Klasse WebRequest erlaubt es, eine Http-Anfrage durchzuführen. 
            WebRequest request = WebRequest.Create(url);

            // Wir brauchen für die Login-Daten die Methode POST
            request.Method = "POST";

            // Nun schreiben wir die POST-Daten in die Anfrage
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(data, 0, data.Length);
            stream.Close();

            // Gibt die Antwort (also den Seitenquelltext) als String zurück
            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<stringstring> 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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 :cry:

gruß Alan
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: So 22.08.10 20:35 
Ich habe es immer noch nicht gefunden :cry:

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