Hallo, Ik ben recent begonnen met PHP en ik ben bezig met een script waarbij ik met behulp van snoopy mezelf door een 2 pagina's met formulieren probeer te loodsen, waarbij ik vervolgens terechtkom op de pagina waar ik wil zijn.

Het doel is om met mijn php class in een keer bij mijn rooster te komen, momenteel gaat dit als volgt:
-Je komt op de eerste pagina: default.aspx hier voer je de eerste 4 letter van je achternaam in en drukt op zoek
-Je komt op de tweede pagina: LogInWebForm.aspx hier kies je uit de lijst je naam en klikt op 'rooster'
-Je komt op de derde pagina: hier zie je je rooster

Het lastige is, dat je niet simpelweg een formuliertje kan doen en direct naar de roosterpagina, maar dat je je door de pagina's heen moet loodsen, en elke keer de _VIEWSTATE variable moet ophalen (waarbij de eerste "static" is).

Hieronder mij class, die in theorie zou moeten werkenin theorie zou moeten werken.

<?php
include "Snoopy.class.php";
$snoopy = new Snoopy;

$submit_url = "http://walterbosch.cupweb6.nl";

$submit_vars["_nameTextBox"] = "jac";
$submit_vars["_zoekButton"] = "Zoek";
$submit_vars["numberOfLettersField"] = "3";
$submit_vars["__VIEWSTATE"] = "/wEPDwULLTE3NDM5MzMwMzRkZA==";

$snoopy->submit($submit_url,$submit_vars);
while(list($key,$val) = each($snoopy->headers)){
if(stripos($val, "SessionId")!==false)
{
$v = explode("ASP.NET_SessionId=",$val);
$w = explode(";",$v[1]);
$sessionId = $w[0];
}
}


$url = "http://walterbosch.cupweb6.nl/LogInWebForm.aspx";
$x = explode("__VIEWSTATE\" value=\"", $snoopy->results);
$y = explode("\"", $x[1]);
$viewstate = $y[0];

$name = "Berg van den Nick (3H1)[150033]";
$vars["__VIEWSTATE"] = $viewstate;
$vars["_nameDropDownList"] =$name;
$vars["_pincodeTextBox"] = "";
$vars["_roosterbutton"] = "Rooster";

$snoopy->cookies["ASP.NET_SessionId"] = $sessionId;
$snoopy->submit($url,$vars);
print $snoopy->results;
?>


Echter, krijg ik bij het uitvoeren hiervan de volgende print terug:
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.


Waaruit blijkt dat zij een bepaalde instelling hebben gezet "to verify that arguments to postback or callback events originate from the server that originally rendered them".

Ik denk als volgt, als je het met je browser kan doen, moet het met PHP ook mogelijk zijn. Is er een mogelijkheid om mijn script hierop aan te passen, of is het wellicht beter om een geheel andere weg in te slaan?
Ik verwacht dat ASP intussen een update heeft gehad met een verbeterde beveiliging o.i.d.
Zal denk ik lastig worden om het werkend te krijgen.
Vraag ze eens of die beveiliging uit kan worden gezet?
Ik denk niet dat dat mogelijk is, het geheel is extern gehost en geheel niet aanpasbaar. In het geval dat, dan zouden ze eerst contact op moeten nemen met het sofwarebedrijf, dat vervolgens de sourcecode van hun systeem moet aanpassen, waardoor de wijzigingen opgaan voor al hun klanten.

Anders moet ik misschien op zoek gaan naar een andere aanpak, zoals deze website bijvoorbeeld doet. http://cup.kevinalberts.nl/rooster.php?s=1 die communiceert met een Iframe.

Ik weet dat dit misschien een beetje oud is maar ik heb een eigen CUPWEB-API gemaakt voor PHP: https://github.com/MegaCookie/CUP-PHP
Hoef je niet te gebruiken maar kan als voorbeeld dienen om via CURL het rooster op te halen.
Mega Cookie op 16/05/2014 11:55:11

Ik weet dat dit misschien een beetje oud is maar ik heb een eigen CUPWEB-API gemaakt voor PHP: https://github.com/MegaCookie/CUP-PHP
Hoef je niet te gebruiken maar kan als voorbeeld dienen om via CURL het rooster op te halen.


Geweldig! Bedankt voor je reactie! Ik had al even snel naar open source projecten gekeken (maar cup is helaas een algemene uitdrukking). Ik zal er meteen naar kijken.

EDIT: Het werkt, ik hoefde alleen nog de _VIEWSTATE in getTimeTable aan te passen, nogmaals bedankt!
Toch vrees ik dat het niet echt zal werken, gezien de ASPX-pagina een beveiliging heeft. maar het is het proberen waard. Ben benieuwd naar de bevindingen.
Mooi om te horen dat het werkt! Ik zal het in de documentatie zetten en de code een beetje aanpassen, dat de Viewstate veranderd moet worden omdat dit dus blijkbaar op elke andere CUPWEB-site anders is (logisch eigenlijk maar zonder het testen op een andere site dan van m'n eigen school zou ik hier nooit achter zijn gekomen).
Off-topic: wat ben je van plan te gaan maken? Ik ben wel benieuwd.
@-AAR-: De 'beveiliging' van ASPX is gewoon een fout in de Post-headers hierbij hebben ViewState en EventValidation een grote invloed en moet je goed bestuderen welke andere headers er allemaal worden verzonden (zelfs voor een paar stomme knopjes). Daarnaast zijn ViewState of EventValidation meestal dynamisch, en dus lastig om snel te implenteren via een CURL-request.
Ik weet nog niet wat ik van plan ben, het was altijd al een opmerkelijke site (het werkte nooit helemaal lekker), toen ben ik eens in de broncode gaan kijken & experimenteren. Mijn uiteindelijke doel is om in 1 klik de lessen te bekijken (dus niet meer doorklikken & wachten) en daar ben ik nu aan toegekomen (ik parseer de broncode verder niet, ik laat hem gewoon direct zien).

Reageren