cURL Login

05/29/2016 22:00 TheToasty#1
Hallo,
ich arbeite momentan an einem kleinen Projekt, wo ich mich mithilfe cURL auf einer anderen Website einlogge.

Bisher hat das super funktioniert:
PHP Code:
<?php
$username 
"name";
$password "passwort";

$url "website";

$ch curl_init();
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_USERPWD"$username:$password");
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC);
$output curl_exec($ch);
$info curl_getinfo($ch);
curl_close($ch);
echo(
$output)
?>
Allerdings hat sich die Zielseite geupdated und verwendet nun javascript, weshalb mein script nicht mehr funktioniert. Hat jemand eine Idee oder einen Ansatz wie nun ein Login Request senden kann?

Die demo zu meiner Zielseite gibts hier (funktioniert genauso): [Only registered and activated users can see links. Click Here To Register...]
05/29/2016 23:07 ~ JWonderpig ~#2
[Only registered and activated users can see links. Click Here To Register...]

+

[Only registered and activated users can see links. Click Here To Register...]

Die Request Daten kannst du übrigens mit den Chrome DevTools ganz einfach aus/mitlesen ;)
05/30/2016 01:37 False#3
Quote:
Originally Posted by ~ JWonderpig ~ View Post
[Only registered and activated users can see links. Click Here To Register...]

+

[Only registered and activated users can see links. Click Here To Register...]

Die Request Daten kannst du übrigens mit den Chrome DevTools ganz einfach aus/mitlesen ;)
Thema richtig gelesen(?), er hatte den login ja schon funktionsfähig..
Nur hat er nun ein Problem da die nun Javascript nutzen.
05/30/2016 07:20 ~ JWonderpig ~#4
Thema richtig gelesen(?) Er hat geschrieben, dass die Webseite geupdated wurde. Er hat gefragt wie er einen Login Request schicken kann und das ist die Antwort.
05/30/2016 17:18 False#5
Quote:
Originally Posted by ~ JWonderpig ~ View Post
Thema richtig gelesen(?) Er hat geschrieben, dass die Webseite geupdated wurde. Er hat gefragt wie er einen Login Request schicken kann und das ist die Antwort.
Ja die Seite wurde wurde geupdatet und seit dem update nutzt die Seite Javascript wodurch sein Login per curl scheinbar nicht mehr funktioniert(es hat jedoch schon einmal funktioniert).Also lieber erst genau lesen :p
05/30/2016 18:38 Serraniel#6
Quote:
Originally Posted by ~ JWonderpig ~ View Post
[Only registered and activated users can see links. Click Here To Register...]

+

[Only registered and activated users can see links. Click Here To Register...]

Die Request Daten kannst du übrigens mit den Chrome DevTools ganz einfach aus/mitlesen ;)
Den Curl Request an die URL oben senden. Der preventCache Parameter sieht aus wie nen Unix Timestamp mit irgendeinem Anhängsel am Ende.
Curl Request mit Formulardaten machst du so:

PHP Code:
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS'buttonInfo=VALUE&school=SCHOOLNAME&j_username=USERNAME&j_password=PASS); 
Werte musst du dann ersetzen.

Quote:
Originally Posted by .ƒaℓsє. View Post
Thema richtig gelesen(?), er hatte den login ja schon funktionsfähig..
Nur hat er nun ein Problem da die nun Javascript nutzen.
Der Screenshot ist aber trotzdem das was er braucht :o
05/30/2016 19:01 ~ JWonderpig ~#7
Quote:
Originally Posted by .ƒaℓsє. View Post
Ja die Seite wurde wurde geupdatet und seit dem update nutzt die Seite Javascript wodurch sein Login per curl scheinbar nicht mehr funktioniert(es hat jedoch schon einmal funktioniert).Also lieber erst genau lesen :p
In der alten Version hat die Seite HTTP Auth benutzt. Da muss man halt den Login Request einmal neu bauen, wenn jetzt Javascript und PHP genutzt wird... Verstehe dein Problem nicht.
05/30/2016 21:30 False#8
Quote:
Originally Posted by ~ JWonderpig ~ View Post
In der alten Version hat die Seite HTTP Auth benutzt. Da muss man halt den Login Request einmal neu bauen, wenn jetzt Javascript und PHP genutzt wird... Verstehe dein Problem nicht.
Habe das "Die Seite nutzt Javascript missverstanden", habe es interpretiert das die Seite per Javascript etwas generiert was mit einbezogen wird (sprich jedes mal neu generiert wird)...
Und dann würde dein einmaliger Request nichts nützen^^
05/30/2016 23:45 TheToasty#9
Erstmal danke für eure Hilfe.

Quote:
Originally Posted by Serraniel View Post
PHP Code:
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS'buttonInfo=VALUE&school=SCHOOLNAME&j_username=USERNAME&j_password=PASS); 
Werte musst du dann ersetzen.
PHP Code:
...
$output curl_exec($ch);
curl_close($ch);

echo(
$output); 
Ich gebe das ganze einfach mittels echo() aus, erhalte aber dann immer nur "WebUntis wird geladen ..." als Ergebnis.

[Only registered and activated users can see links. Click Here To Register...]

Liegt evtl. daran, dass die Elemente die ich ja haben möchte, erst mit javascript "geladen" werden.
Gibt es eine Möglichkeit wie ich irgendwie an die Elemente rankomme?
Früher war's einfach so, dass diese per html Tabelle ausgegeben wurden und ich mit echo($output) einfach mein Ergebnis direkt hatte.
05/31/2016 08:29 Serraniel#10
Du musst dir anschauen, welche Seiten vom Javascript nachgeladen werden. F12 -> Network und dann Seite aufrufen. Dann siehst du was alles geladen wird, wie auf dem Screenshot am Anfang schon.
09/13/2016 22:00 TheToasty#11
Hab mich mal nach längerer Zeit mal wieder damit beschäftigt und stehe vor einem neuen Problem.
Code:
<?php
$url="https://demo.webuntis.com/WebUntis/j_spring_security_check?request.preventCache=1473795708594"; 

$cookie_file_path = "/cookie.txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
//set the cookie the site has for certain features, this is optional
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0");
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'buttonName=login&school=demo_inf&j_username=Schueler&j_password=');

curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "https://demo.webuntis.com/WebUntis/lessoninfodlg.do?&date=20160914&starttime=950&endtime=1035&elemid=211&elemtype=1&ttFmtId=15&request.preventCache=1473795283424");
$html = curl_exec($ch);
curl_close($ch);

echo($html);

// https://demo.webuntis.com/WebUntis/index.do#main -> Benutzer= "Schueler")
?>
Soweit so gut. Wenn ich mich manuell, also ganz normal im Browser auf die Demoseite einlogge, dann zu meiner Zielseite navigiere (.../WebUntis/lessoninfodlg.do?&date=...), wird die Seite ganz normal angezeigt.

Wenn ich nun aber mein PHP Code von oben laufen lasse, bekommt man nur:
{"errorMessage":"successView isn't set","requestURI":"/WebUntis/lessoninfodlg.do"} angezeigt.

Ich kann mit der Fehlermeldung nichts anfangen... Habt ihr vielleicht eine Idee, wie ich mein Code zum laufen bringe?