Toon posts:

[C#] Inloggen op een website

Pagina: 1
Acties:

Onderwerpen


  • Gynnad
  • Registratie: september 2010
  • Laatst online: 08:51
Hallo,

Ik probeer op een site in te loggen via een applicatie om daarna XML gegevens er vanaf te halen. Helaas krijg ik het alleen niet voor elkaar om of in te loggen of die XML gegevens eraf te halen.

Vandaar dat ik dit topic heb geopend om te vragen of iemand van jullie het probleem kan vinden:

Inloggen
C#:
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
        public String signIn(String userName, String passWord)
        {
            try
            {

                //http://www.maxithlon.com/index.php?user=XXX&password=XXX&user_access=maxixml 
                String lcUrl = "http://www.maxithlon.com/index.php?user=" + userName + "&password=" + passWord + "&user_access=maxixml";
                HttpWebRequest loHttp = loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);
                loHttp.UserAgent = "XXXXXXXXXX/v1.0";
                loHttp.CookieContainer = new CookieContainer();
                if (m_CookiesCol != null && m_CookiesCol.Count > 0)
                    loHttp.CookieContainer.Add(m_CookiesCol);
                HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
                m_CookiesCol = loWebResponse.Cookies;
                if (loWebResponse.Cookies.Count > 0)
                    m_CookiesCol = loWebResponse.Cookies;
                Encoding enc = Encoding.GetEncoding(1252);
                StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc);
                String lcHtml = loResponseStream.ReadToEnd();
                loWebResponse.Close();
                loResponseStream.Close();
                return lcHtml;
            }
            catch (Exception e)
            {
                return e.Message;
            }
        }


Graag wil ik eerst het inloggen goed voor elkaar hebben, daarna wil ik pas kijken voor het XML van de site af halen.

[Voor 0% gewijzigd door RobIII op 09-11-2010 19:34. Reden: Code tags gefixed :P]

"Don't worry, about a thing, Cause every little thing is gonna be alright"


  • mbaltus
  • Registratie: augustus 2004
  • Laatst online: 23-09 16:08
en wat gaat er mis dan?
Maar eentje voor mn neus weg dan: zitten er misschien ongeldige karakters in gebruikersnaam of wachtwoord zitten die niet netjes omgezet zijn naar URL veilige tekens?

The trouble with doing something right the first time is that nobody appreciates how difficult it is


  • CodeCaster
  • Registratie: juni 2003
  • Niet online

CodeCaster

👌👀 good shit ✔💯

Gynnad schreef op zaterdag 30 oktober 2010 @ 12:36:
Helaas krijg ik het alleen niet voor elkaar om of in te loggen of die XML gegevens eraf te halen.
Foutmeldingen, variabelen die leeg blijven of cookies die niet worden geset?

En ga eens debuggen :)

As always, we are nailed to a cross of our own construction.


  • Davio
  • Registratie: november 2007
  • Laatst online: 13-07 14:13
Ik zou een string toch liever zou opbouwen, is voor mij overzichtelijker:

C#:
1
String lcUrl = string.Format(@"http://www.maxithlon.com/index.php?user={0}&password={1}&user_access=maxixml", userName, passWord);


Ik heb hier voor de zekerheid het verbatim (@) karakter gebruikt.

Daarbij is het misschien handig om niet alles in één try-catch te zetten, maar de boel een beetje op te breken en alleen de functies die een exception kunnen geven in de try-catch zetten.

  • Gynnad
  • Registratie: september 2010
  • Laatst online: 08:51
CodeCaster schreef op zaterdag 30 oktober 2010 @ 12:49:
[...]

Foutmeldingen, variabelen die leeg blijven of cookies die niet worden geset?

En ga eens debuggen :)
Kijk het lastige is,dat ik zelf 1 jaar C# heb gehad en 1 jaar Java, maar dat ik zelf nooit iets met Cookies heb geleerd. Nu ben ik tot deze code gekomen, maar kom ik er niet uit wanneer ik kan kijken of ik daadwerkelijk ben ingelogd of dat er niets gebeurd. Ik ben er nu nog even aan het sleutelen en zal dadelijk de code weer eens posten.

Zal dan ook even al mijn bevindingen posten!

Edit:

Code veranderd in:
C#:
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Xml;
using System.Data;
using System.IO;
using System.Windows.Forms;

namespace Maxato
{
    class Connect
    {
        private CookieCollection m_CookiesCol = new CookieCollection();

        public String signIn(String userName, String passWord)
        {
            try
            {

                //http://www.maxithlon.com/index.php?user=XXX&password=XXX&user_access=maxixml 
                //String lcUrl = "http://www.maxithlon.com/index.php?user=" + userName + "&password=" + passWord + "&user_access=maxixml";
                String lcUrl = string.Format(@"http://www.maxithlon.com/index.php?user={0}&password={1}&user_access=maxixml", userName, passWord);
                HttpWebRequest loHttp = loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);
                loHttp.UserAgent = "XXXXXXXXXX/v1.0";
                loHttp.CookieContainer = new CookieContainer();
                if (m_CookiesCol != null && m_CookiesCol.Count > 0)
                    loHttp.CookieContainer.Add(m_CookiesCol);
                HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
                m_CookiesCol = loWebResponse.Cookies;
                if (loWebResponse.Cookies.Count > 0)
                    m_CookiesCol = loWebResponse.Cookies;
                Encoding enc = Encoding.GetEncoding(1252);
                StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc);
                String lcHtml = loResponseStream.ReadToEnd();
                loWebResponse.Close();
                loResponseStream.Close();
                MessageBox.Show("Gelukt"); 
                return lcHtml;
            }
            catch (Exception e)
            {
                MessageBox.Show("Mislukt"); 
                return e.Message;
            }
        }
    }
}




Als ik mijn class debug doorloopt hij alles en geeft hij nergens een foutmelding. Maar als ik bij lcHtml HTML Visualizer doe dan krijg ik de pagina te zien zoals je deze hoort te zien als je bent ingelogd, maar als ik dan in deze pagina op een link drukt naar een andere pagina binnen deze website ben ik ineens uitgelogd. Dus ik ga er vanuit dat hij op een of andere manier de Cookies niet goed opslaat.

Doe ik het bovenstaande proces met een verkeerd wachtwoord/gebruikersnaam dan kom ik gewoon aan de buitenkant van de pagina zonder dat ik ben ingelogd.

ps. De messagebox met 'Gelukt' doet hij altijd, ook als ik een verkeerd wachtwoord/gebruikersnaam invul, weet niet waar ik dit exact af zou moeten vangen.

[Voor 69% gewijzigd door RobIII op 09-11-2010 19:35]

"Don't worry, about a thing, Cause every little thing is gonna be alright"


  • Korben
  • Registratie: januari 2001
  • Laatst online: 20-09 11:49

Korben

() => {};

Kijk het lastige is,dat ik zelf 1 jaar C# heb gehad en 1 jaar Java, maar dat ik zelf nooit iets met Cookies heb geleerd.
Als je denkt dat je in 1 jaar C# (en vooral .NET) kunt leren, zelfs full-time, dan zul je bedrogen uitkomen.
maar als ik dan in deze pagina op een link drukt naar een andere pagina binnen deze website ben ik ineens uitgelogd.
Nogal logisch, je visualiseert een blok HTML wat, wat de debugger betreft, je letterlijk hebt ingetikt. De visualizer heeft er geen idee van (en dat hoort ie ook niet te hebben) dat jij die HTML hebt opgevraagd met een HttpWebRequest en dat daar cookies bij horen. Probeer eens een nieuwe request vanuit je code te doen met dezelfde CookieCollection.
ook als ik een verkeerd wachtwoord/gebruikersnaam invul, weet niet waar ik dit exact af zou moeten vangen.
Misschien een regex, of screen scraping? Dit zijn dingen waar je op Google of zelfs op GoT prima voorbeelden voor kunt vinden.

[Voor 26% gewijzigd door Korben op 30-10-2010 14:34]

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • bastv
  • Registratie: september 2005
  • Laatst online: 22-09 15:57
mijn suggestie zou zijn om htmlagilitypack te gebruiken
http://htmlagilitypack.codeplex.com/
inloggen etc. gaat hier ook prima mee
http://refactoringaspnet....pack-to-get-and-post.html

  • Gynnad
  • Registratie: september 2010
  • Laatst online: 08:51
Hmm ik kom er totaal niet uit, en kan nergens een tutorial/pagina vinden waar staat uitgelegd hoe ik een file/xml bestand van een site af kan halen. Het xml bestand staat geschreven in een .php extensie. Ik ben echt ten einde raad..

Hier mijn code, hij is een beetje slordig nu, omdat ik vanalles heb geprobeerd maar ik kom er maar niet uit..

C#:
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
        public String signIn(String userName, String passWord)
        {
            string url = string.Format(@"http://www.maxithlon.com/index.php?user={0}&password={1}&user_access=maxixml", userName, passWord);
            request = (HttpWebRequest)WebRequest.Create(url);
            request.AllowAutoRedirect = false;
            request.CookieContainer = new CookieContainer();
            response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode != HttpStatusCode.Found)
                {
                //ToDo: if the page wasn't found raise Exception //instead of this textmessage MessageBox.Show("Something Wrong");
                response.Close();
                request.KeepAlive = false;
                return null;
                }
            cookies = request.CookieContainer;
            response.Close();
            request = (HttpWebRequest)WebRequest.Create("http://www.maxithlon.com/xml/lista_atleti.php");
            request.AllowAutoRedirect = false;
            request.CookieContainer = cookies;
            response = (HttpWebResponse)request.GetResponse(); using (Stream s = response.GetResponseStream())
            {
                StreamReader sr = new StreamReader(s);
                string line;

                XmlTextReader myXmlURLreader = null;
                myXmlURLreader = new XmlTextReader("http://www.maxithlon.com/xml/lista_atleti.php");
                    

                while (myXmlURLreader.Read())
                {
                    Console.WriteLine(myXmlURLreader.Read());

                }
                if (myXmlURLreader != null)
                    myXmlURLreader.Close();

                while (!sr.EndOfStream)
                {
                    //todo read the page contents
                }
            }
            return null;
      }

[Voor 0% gewijzigd door RobIII op 09-11-2010 19:35. Reden: Code tags gefixed :P]

"Don't worry, about a thing, Cause every little thing is gonna be alright"


  • Haan
  • Registratie: februari 2004
  • Nu online

Haan

dotnetter

Ik weet niet of het met inloggen heel anders wordt, maar om een XML bestand vanuit een url te laden is dit al voldoende:
C#:
1
2
WebClient client = new WebClient();
string content = client.DownloadString(url);

Dit gebruik ik zelf in een applicatie om een XML te downloaden van een php pagina.

Kater? Eerst water, de rest komt later
Last.fm profiel


  • CMG
  • Registratie: februari 2002
  • Laatst online: 30-03 23:19
Je moet echt wat beter na je code kijken. in je oude code stond dit:

C#:
1
2
3
m_CookiesCol = loWebResponse.Cookies; 
if (loWebResponse.Cookies.Count > 0) 
m_CookiesCol = loWebResponse.Cookies;


in je nieuwe code heb je

C#:
1
2
3
4
5
cookies = request.CookieContainer; 
response.Close(); 
request = (HttpWebRequest)WebRequest.Create("http://www.maxithlon.com/xml/lista_atleti.php");
 request.AllowAutoRedirect = false; 
request.CookieContainer = cookies;


Dat slaat natuurlijk nergens op met die cookiecontainer.

Wat je ons zelf verteld is dat je kan inloggen. Je weet alleen niet hoe je verder moet.

Als je gaat debuggen en de HTML bekijkt zie je namelijk de pagina die je ziet als je bent ingelogd, prima. Het is echter logisch dat je niet kunt navigeren vanaf daar; de visualiser heeft natuurlijk niet de cookies die je nodig hebt, die bij jou in je cookie container zitten... je moet dus gewoon verder met het ophalen van je XML.

NKCSS - Projects - YouTube - Twitch


  • Depress
  • Registratie: mei 2005
  • Laatst online: 17-09 14:40
Het probleem is dat je wel succesvol inlogd, maar nadat je bent ingelogd, stuur je de cookie niet mee waar je session-id inzit. Hierdoor weet de website niet dat je al een keer bent ingelogd.
Je moet dus in je html request de cookies die je terug krijgt bewaren, en opnieuw mee sturen wanneer je de 2e link wilt openen.

  • Gynnad
  • Registratie: september 2010
  • Laatst online: 08:51
Haan schreef op dinsdag 09 november 2010 @ 19:46:
Ik weet niet of het met inloggen heel anders wordt, maar om een XML bestand vanuit een url te laden is dit al voldoende:
C#:
1
2
WebClient client = new WebClient();
string content = client.DownloadString(url);

Dit gebruik ik zelf in een applicatie om een XML te downloaden van een php pagina.
Nee dat is niet voldoende, ben nog steeds aan het aanklote met die coockies..

"Don't worry, about a thing, Cause every little thing is gonna be alright"


  • Phyxion
  • Registratie: april 2004
  • Laatst online: 03-09 09:49

Phyxion

_/-\o_

Zo ingewikkeld is het nou ook niet, je moet een CookieContainer aanmaken en bij de volgende request die CookieContainer gebruiken, dat is alles.

'You like a gay cowboy and you look like a gay terrorist.' - James May


  • mrFoce
  • Registratie: augustus 2004
  • Laatst online: 03:44
Phyxion schreef op donderdag 09 december 2010 @ 23:44:
Zo ingewikkeld is het nou ook niet, je moet een CookieContainer aanmaken en bij de volgende request die CookieContainer gebruiken, dat is alles.
Juist. Begin is met het opzetten van een fatsoenlijke Class waarbij je gebruikt maakt van een 'CookieContainer' die je eenvoudig kan meegeven aan een 2e call naar die website.

Oftewel

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Class DownloadFile
{
CookieContainer cookieContainer;
WebRequest webRequest;

public DownloadFile()
{
 this.cookieContainer = new CookieContainer();
}

private static void Login()
{
 WebRequest.cookieContainer  = this.cookieContainer;
}

private static void Login()
{
 WebRequest.cookieContainer  = this.cookieContainer;
}
}


iets in die trant. Syntax klopt niet, maar gaat om t idee
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee