[java] Scriptfout of methode in website zelf

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gynnad
  • Registratie: September 2010
  • Laatst online: 22:25
Ik ben bezig met het maken van een inlogsysteem voor een spel wat ik speel, hiermee wil ik later waardes gaan berekenen, maar daarvoor dien ik eerst ingelogd te zijn om deze waardes te kunnen zien. Nu heb ik veel rond gekeken en ben ik uiteindelijk tot de volgende code gekomen.

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
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Connection;

/**
 *
 * @author Danny
 */
import java.net.*;
import java.io.*;

    public class ConnectToURL {

        // Variables to hold the URL object and its connection to that URL.
        private static URL URLObj;
        private static URLConnection connect;

    public static void main(String[] args) {
        try {
            // Establish a URL and open a connection to it. Set it to output mode.
            //login link: http://www.maxithlon.com/maxi-xml/login.php?user=Gynnad&scode=1q2w3e4r
            URLObj = new URL("http://www.maxithlon.com/maxi-xml/login.php");
            connect = URLObj.openConnection();
            connect.setDoOutput(true);
       }
        catch (MalformedURLException ex) {
            System.out.println("The URL specified was unable to be parsed or uses an invalid protocol. Please try again.");
            System.exit(1);
        }
        catch (Exception ex) {
            System.out.println("An exception occurred. " + ex.getMessage());
            System.exit(1);
        }


      try {
            // Create a buffered writer to the URLConnection's output stream and write our forms parameters.
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connect.getOutputStream()));
            writer.write("user=Gynnad&scode=1q2w3e4r");
            //username=MyUsername&pass=MyPassword&submit=Login (Origineel van de tutorial)
            //user=Gynnad&scode=1q2w3e4r (dit is wat de weburl zelf gebruikt)
            writer.close();

            // Now establish a buffered reader to read the URLConnection's input stream.
            BufferedReader reader = new BufferedReader(new InputStreamReader(connect.getInputStream()));

            String lineRead = "";

            // Read all available lines of data from the URL and print them to screen.
            while ((lineRead = reader.readLine()) != null) {
                System.out.println(lineRead);
            }

            reader.close();
        }
            catch (Exception ex) {
                System.out.println("There was an error reading or writing to the URL: " + ex.getMessage());
            }
        }
    }


Ik krijg het volgende terug:
code:
1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<maxi-xml>
  <error>Login failed</error>
</maxi-xml>


Om via de 'normale' XML-url in te loggen gebruik ik: http://www.maxithlon.com/...ser=Gynnad&scode=1q2w3e4r

Gynnad is hierbij de gebruikersnaam
1q2w3e4r is hierbij de securitycode (deze is anders dan het wachtwoord, maar nodig om tot de XML bestanden te komen)

Nu is mijn vraag zit er een fout in mijn code of gebruikt Maxithlon een andere POST methode?

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


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Een query string is niet hetzelfde als een POST body, en afhankelijk van de implementatie kunnen gegevens uit een query string op een andere manier behandeld worden dan een POST body.

Je code gebruikt een POST body, terwijl de URL die je er onder toont een query string gebruikt.

Daarnaast moet je bij het gebruik van een POST body met form data ook de juist contenttype opgeven in de headers (bijvoorbeeld application/x-www-form-urlencoded) zeker als de applicatie ook andere vormen van input accepteert.

Acties:
  • 0 Henk 'm!

  • Gynnad
  • Registratie: September 2010
  • Laatst online: 22:25
Nou van deze website weten we alleen deze string query om in te loggen, er is ook geen andere mogelijkheid. Dus zal ik een andere manier moeten gebruiken om in te gaan loggen op deze website.

Ik zal eens wat verder rond gaan snuffelen..

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


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Gynnad schreef op woensdag 26 januari 2011 @ 13:59:
Nou van deze website weten we alleen deze string query om in te loggen, er is ook geen andere mogelijkheid. Dus zal ik een andere manier moeten gebruiken om in te gaan loggen op deze website.

Ik zal eens wat verder rond gaan snuffelen..
Gebruik dan de query-string, niet de POST body.

Dus:
Java:
1
2
URLObj = new URL("http://www.maxithlon.com/maxi-xml/login.php?user=Gynnad&scode=1q2w3e4r");
connect = URLObj.openConnection();


Dat hele schrijven naar de outputstream van de connection is dan niet nodig.

[ Voor 23% gewijzigd door Remus op 26-01-2011 15:22 ]


Acties:
  • 0 Henk 'm!

  • Gynnad
  • Registratie: September 2010
  • Laatst online: 22:25
Dit is wat ik nu heb, het inloggen werkt en naar de volgende pagina gaan ook. Nu moet ik alleen nog de XML data daar vandaan halen en zelf in een bestand zetten, dit vormt geen probleem dat lukt wel. Nu was alleen mijn vraag hoe kan ik controleren of hij is ingelogd of dat hij het opnieuw moet proberen. Want de pagina returns altijd een cookie, dus daarop kan ik niet controleren. Wie kan mij hiermee uit de brand helpen.

Hier onder vind je trouwens de code die ik gebruik, twee methodes, één voor het inloggen en één voor het data van een andere pagina af te halen. Mocht je nog feedback voor me hebben dan stel ik deze altijd op prijs!
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
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Connection;

/**
 *
 * @author Danny
 */
import java.net.*;
import java.io.*;

public class ConnectToURL {

    // Variables to hold the URL object and its connection to that URL.
    private String cookie;

    public String signIn(String username, String password) throws MalformedURLException {
        try {
            URL myUrl = new URL("http://www.maxithlon.com/maxi-xml/login.php?user="+username+"&scode="+password+"");
            URLConnection urlConn = myUrl.openConnection();
            urlConn.connect();

            String headerName = null;
            for (int i = 1; (headerName = urlConn.getHeaderFieldKey(i)) != null; i++) {
                if (headerName.equals("Set-Cookie")) {
                    cookie = urlConn.getHeaderField(i);
                    cookie = cookie.substring(0, cookie.indexOf(";"));
                    System.out.println("cookie=" + cookie);
                    String cookieName = cookie.substring(0, cookie.indexOf("="));
                    String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length());
                    System.out.println("cookieName=" + cookieName);
                    System.out.println("cookieValue=" + cookieValue);
                }
            }
            return cookie;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public void getData(String cookie) {
        try {
            URL anotherUrl = new URL("http://www.maxithlon.com/maxi-xml/athletes.php");
            URLConnection connection = anotherUrl.openConnection();
            connection.setRequestProperty("Cookie", cookie);
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String lineRead = "";
            // Read all available lines of data from the URL and print them to screen.
            while ((lineRead = reader.readLine()) != null) {
                System.out.println(lineRead);
            }
            reader.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

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


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Gynnad schreef op vrijdag 28 januari 2011 @ 15:54:
Dit is wat ik nu heb, het inloggen werkt en naar de volgende pagina gaan ook. Nu moet ik alleen nog de XML data daar vandaan halen en zelf in een bestand zetten, dit vormt geen probleem dat lukt wel. Nu was alleen mijn vraag hoe kan ik controleren of hij is ingelogd of dat hij het opnieuw moet proberen. Want de pagina returns altijd een cookie, dus daarop kan ik niet controleren. Wie kan mij hiermee uit de brand helpen.
Als die webservice zich enigzins aan HTTP houd, dan krijg je een HTTP 403 Forbidden of HTTP 401 Unauthorized terug als je niet bent ingelogd. Anders zal je toch echt bij de maker van de webservice te raden gaan hoe ze aangeven dat je niet ingelogd bent.

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 15:16

voodooless

Sound is no voodoo!

XML:
1
2
3
4
  <?xml version="1.0" encoding="utf-8" ?> 
- <maxi-xml>
  <error>You aren't logged</error> 
  </maxi-xml>


.. hoe moeilijk kan het zijn.. Pagina in je browser rammen zonder dat je ingelogd bent, en je weet het :)

[ Voor 19% gewijzigd door voodooless op 29-01-2011 10:41 ]

Do diamonds shine on the dark side of the moon :?

Pagina: 1