Dit is geen illegale actie, maar een legale poging omdat ik ermee ga inloggen met eigen login.
Aantal mensen kennen Skyforge wel, het is mmo spel dat vrij kort geleden dit jaar begonnen is met open beta. Ik ben leader van een pantheon / guild en het wordt steeds meer werk om alles met de hand in te voeren, want een guild daar kan wel 250 players groot worden.
Helaas heeft Skyforge op dit moment geen API hiervoor, maar ze hebben wel alles webbased informatie staan. Die krijg ik alles te zien nadat ik heb ingelogd.
Nou is de bedoeling om data van mijn pantheon te kunnen lezen, parsen en verwerken in een eigen administratie systeem dat ik straks wil maken.
De eerste uitdaging is goed inloggen met cURL. Uiteraard op de beveiligde pagina van Skyforge. Het is gelukt om login pagina in te lezen, velden invullen en vervolgens uitvoeren. Maar de login proces is geen gewoon systeem.
De form data loopt eerst naar andere pagina, een speciale server pagina, die gegevens controleert en vervolgens terugstuurt met aangegeven pagina, of login gelukt is of niet, of ik ben ingelogd.
Ik stuur dus data naar de speciale pagina.
De code is al opgebouwd om te kijken of hele proces goed loopt. Ik kan op 2 manieren doen, zonder cert controle (negeert dus valid cert) of met cert controle met bewaarde cert blauwdruk. De eerste werkt, de tweede geeft al wat problemen in het begin.
Ik heb tot nu toe geen succesvolle login, want ondanks goede login en wachtwoord krijg ik onjuiste login code terug en wordt ik dus teruggestuurd naar login pagina.
Ik ben geen pro in programmeren, maar ik heb wel graag wat hints van anderen waarom het mislukt en wat er eigenlijk anders moet in de code... Misschien moet cURL iets anders voorbereid worden.
Een voorbeeld van juiste code zou ik graag willen zien.
Als je zelf over Skyforge beschikt (hoewel aanmelden gratis is - het is f2p spel) kun je zelf proberen of het voor je wel lukt om in te loggen en dus data eraf kan halen en verder parsen. In de laatste stap code, dat inmiddels uitgeschakeld is, leidt naar mijn character pagina.
Ik hoef alleen maar succesvol inloggen, dan kan ik verder programmeren en zelf oplossen met de data. Hier zit ik alleen beetje vast ondanks vele pogingen, en met weinig ervaring in cURL kost mij teveel tijd waarom het niet goed gaat. Uren mee prutsen is niet leuk. Bovendien is er bijna geen info over inloggen op Skyforge, het is nog nieuw. Wel van andere mmo spellen, maar dat heeft weinig nut als login systeem anders is.
Dit poging is een alternatief wegens gebrek aan API. De guild wordt steeds groter en er komt meer data bij kijken, dus ik moet wel snel boel automatiseren, anders kom ik niet meer aan het spel toe en kan ik niet meer mijn character levelen. Dat is gewoon jammer en anderen vragen mij ook al waarom ik steeds meer achterop raakt.
Oh ja, de script moet natuurlijk wel login vasthouden anders moet ik steeds weer tussendoor inloggen bij elke data collect pagina.... de cookie zou hiervoor zorgen. Of dat ook zo is, weet ik op dit moment niet.
Alvast hartelijk dank.
Aantal mensen kennen Skyforge wel, het is mmo spel dat vrij kort geleden dit jaar begonnen is met open beta. Ik ben leader van een pantheon / guild en het wordt steeds meer werk om alles met de hand in te voeren, want een guild daar kan wel 250 players groot worden.
Helaas heeft Skyforge op dit moment geen API hiervoor, maar ze hebben wel alles webbased informatie staan. Die krijg ik alles te zien nadat ik heb ingelogd.
Nou is de bedoeling om data van mijn pantheon te kunnen lezen, parsen en verwerken in een eigen administratie systeem dat ik straks wil maken.
De eerste uitdaging is goed inloggen met cURL. Uiteraard op de beveiligde pagina van Skyforge. Het is gelukt om login pagina in te lezen, velden invullen en vervolgens uitvoeren. Maar de login proces is geen gewoon systeem.
De form data loopt eerst naar andere pagina, een speciale server pagina, die gegevens controleert en vervolgens terugstuurt met aangegeven pagina, of login gelukt is of niet, of ik ben ingelogd.
Ik stuur dus data naar de speciale pagina.
De code is al opgebouwd om te kijken of hele proces goed loopt. Ik kan op 2 manieren doen, zonder cert controle (negeert dus valid cert) of met cert controle met bewaarde cert blauwdruk. De eerste werkt, de tweede geeft al wat problemen in het begin.
PHP:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
| <?php //username and password of account $EMAIL = trim($_POST["login"]); $PASSWORD = trim($_POST["password"]); $remember = ""; $login_form = "Log In"; $continue = "http://account.my.com/login_continue/?continue=http%3A%2F%2Faccount.my.com"; $failure = "http://account.my.com/login/?continue=http%3A%2F%2Faccount.my.com"; $nosavelogin = "0"; // options $cookie_file_path = "/tmp/cookies.txt"; $LOGINURL = "https://account.my.com/login/"; $agent = "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0"; if ($EMAIL<>"") { // begin script $ch = curl_init(); // extra headers $headers[] = "Accept: */*"; $headers[] = "Connection: Keep-Alive"; $headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8"; // basic curl options for all requests // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "certificate.my.com.crt"); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); // Timeout in seconds curl_setopt($ch, CURLOPT_TIMEOUT, 20); // set first URL curl_setopt($ch, CURLOPT_URL, $LOGINURL); // execute session to get cookies and required form inputs $content = curl_exec($ch); // grab the hidden inputs from the form required to login $fields = getFormFields($content); if ($fields<>"ERROR") { $result="Fields found"; $fields['email'] = $EMAIL; $fields['password'] = $PASSWORD; // $fields['continue'] = $continue; // $fields['failure'] = $failure; // $fields['nosavelogin'] = $nosavelogin; $LOGINURL = "https://auth-ac.my.com/auth"; // $LOGINURL = "https://account.my.com/login/"; // set postfields using what we extracted from the form $POSTFIELDS = http_build_query($fields); // change URL to login URL curl_setopt($ch, CURLOPT_URL, $LOGINURL); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // set post options curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); curl_setopt($ch, CURLOPT_HEADER, 1); // perform login $result = curl_exec($ch); } else { $result="Cannot find form fields"; } /* // derde stap: haaldata op? $CHECKURL = "https://eu.portal.sf.my.com/user/avatar/72061992084468153"; // change URL to login URL curl_setopt($ch, CURLOPT_URL, $CHECKURL); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_HEADER, 1); // haal data op login $checkresult = curl_exec($ch); */ // print $result; curl_close($ch); } else { $result="Login afgebroken, lege usernaam gevonden"; } function getFormFields($data) { if (preg_match('/(<form id="login_form" method="post" action=".*?<\/form>)/is', $data, $matches)) { $inputs = getInputs($matches[1]); return $inputs; } else { return "ERROR"; } } function getInputs($form) { $inputs = array(); $elements = preg_match_all('/(<input[^>]+>)/is', $form, $matches); if ($elements > 0) { for($i = 0; $i < $elements; $i++) { $el = preg_replace('/\s{2,}/', ' ', $matches[1][$i]); if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name)) { $name = $name[1]; $value = ''; if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value)) { $value = $value[1]; } $inputs[$name] = $value; } } } return $inputs; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Skyforge cURL test</title> </head> <body> cURL TEST<br /> <textarea cols="120" rows="40"> --SITE----------------------- <? echo "\r\n"; ?> <? echo $content; ?> <? echo "\r\n"; ?> --LOGIN---------------------- <? echo "\r\n"; ?> <? echo $result; ?> <? echo "\r\n"; ?> --CHECK---------------------- <? echo "\r\n"; ?> <? echo $checkresult; ?> <? echo "\r\n"; ?> --END------------------------ </textarea> </body> </html> |
Ik heb tot nu toe geen succesvolle login, want ondanks goede login en wachtwoord krijg ik onjuiste login code terug en wordt ik dus teruggestuurd naar login pagina.
Ik ben geen pro in programmeren, maar ik heb wel graag wat hints van anderen waarom het mislukt en wat er eigenlijk anders moet in de code... Misschien moet cURL iets anders voorbereid worden.
Een voorbeeld van juiste code zou ik graag willen zien.
Als je zelf over Skyforge beschikt (hoewel aanmelden gratis is - het is f2p spel) kun je zelf proberen of het voor je wel lukt om in te loggen en dus data eraf kan halen en verder parsen. In de laatste stap code, dat inmiddels uitgeschakeld is, leidt naar mijn character pagina.
Ik hoef alleen maar succesvol inloggen, dan kan ik verder programmeren en zelf oplossen met de data. Hier zit ik alleen beetje vast ondanks vele pogingen, en met weinig ervaring in cURL kost mij teveel tijd waarom het niet goed gaat. Uren mee prutsen is niet leuk. Bovendien is er bijna geen info over inloggen op Skyforge, het is nog nieuw. Wel van andere mmo spellen, maar dat heeft weinig nut als login systeem anders is.
Dit poging is een alternatief wegens gebrek aan API. De guild wordt steeds groter en er komt meer data bij kijken, dus ik moet wel snel boel automatiseren, anders kom ik niet meer aan het spel toe en kan ik niet meer mijn character levelen. Dat is gewoon jammer en anderen vragen mij ook al waarom ik steeds meer achterop raakt.
Oh ja, de script moet natuurlijk wel login vasthouden anders moet ik steeds weer tussendoor inloggen bij elke data collect pagina.... de cookie zou hiervoor zorgen. Of dat ook zo is, weet ik op dit moment niet.
Alvast hartelijk dank.