Avatar billede ClubAcedDK Nybegynder
03. december 2014 - 15:02 Der er 8 kommentarer og
1 løsning

PHP/cURL: Hjælp til at logge ind på SSL side og hente noget json fra en anden side på samme domæne.

Hejsa,

Jeg trænger gevaldigt til noget kyndig hjælp med denne opgave.

Scriptet jeg forsøger at stykke sammen skal kunne:
- Logge ind på https://viaplay.dk
- Lagre cookie i txt-fil
- Holde sessionen i live
- Returnere Json-indhold fra anden side på samme domæne.

Jeg forsøgte for ca. 5 mdr. siden at finde hjælp herinde, men det ønskede resultat blev aldrig opnået. http://www.eksperten.dk/spm/995930

Nu giver jeg det et forsøg mere, i håbet om at der sidder én som kan gennemskue hvordan den skal klares.

På forhånd tak.
// Ace
Avatar billede moddi100 Seniormester
06. december 2014 - 11:28 #1
Hvor langt er du nået?
Avatar billede ClubAcedDK Nybegynder
08. december 2014 - 11:40 #2
Dette er scriptet som det ser ud lige nu. Men det lader til, at der ikke gemmes noget i cookie.txt

<?php
// Login
$username = "xxxx@xxxxxxxx.dk";
$password = "xxxxxxxxx";
$ch = curl_init("https://login.viaplay.dk/api/login/v1?deviceKey=pc-dk&returnurl=http%3A%2F%2Fcontent.viaplay.dk%2Fpc-dk&username=".urlencode($username)."&password=".urlencode($password)."&persistent=true");
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "http://clubace.dk/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "http://clubace.dk/cookie.txt");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
echo curl_exec ($ch);

// Read the session saved in the cookie file
echo "<br/><br/>";
$file = fopen("http://clubace.dk/cookie.txt", "r");
echo fread($file, 100000000); 
echo "<br/><br/>";

// Retrieve content
$ch = curl_init("https://play.viaplay.dk/api/stream/v1?deviceId=A3C12FC894EB0D3F0942DF2962CC71F4&deviceName=web&deviceType=pc&userAgent=Mozilla%2F5.0%20%28Windows%20NT%206.3%3B%20WOW64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F35.0.1916.153%20Safari%2F537.36&deviceKey=pc-dk&productId=168768");
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "http://clubace.dk/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "http://clubace.dk/cookie.txt");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
echo curl_exec ($ch);
?>
Avatar billede ClubAcedDK Nybegynder
08. december 2014 - 11:45 #3
... og det ser egentlig heller ikke ud til, at det lykkes scriptet at logge ind http://clubace.dk/curl_test.php
Avatar billede ClubAcedDK Nybegynder
09. december 2014 - 00:47 #4
Håber lidt på, at der er en der har et login til viaplay.dk som gider teste det...
Avatar billede moddi100 Seniormester
12. december 2014 - 12:45 #5
1) Din fejl ligger i filnavnet, brug ikke http:// foran, da det giver en ugyldig filplacering.

2) Derudover bruger du fopen() men aldrig fclose(), hvilket betyder at du fortsat holder filen åben, når du kommer til curl-delen igen. Luk filen eller brug min rettelse herunde.

Med 1) og 2) udbedret, ser dit script således ud:
<?php
// Login
$username = "xxxx@xxxxxxxx.dk";
$password = "xxxxxxxxx";
$file    = dirname(__FILE__) . "cookie.txt";

$ch = curl_init("https://login.viaplay.dk/api/login/v1?deviceKey=pc-dk&returnurl=http%3A%2F%2Fcontent.viaplay.dk%2Fpc-dk&username=".urlencode($username)."&password=".urlencode($password)."&persistent=true");
curl_setopt($ch, CURLOPT_COOKIEFILE, $file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
echo curl_exec ($ch);

// Read the session saved in the cookie file
echo "<br/><br/>";
echo file_get_contents($file);
echo "<br/><br/>";

// Retrieve content
$ch = curl_init("https://play.viaplay.dk/api/stream/v1?deviceId=A3C12FC894EB0D3F0942DF2962CC71F4&deviceName=web&deviceType=pc&userAgent=Mozilla%2F5.0%20%28Windows%20NT%206.3%3B%20WOW64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F35.0.1916.153%20Safari%2F537.36&deviceKey=pc-dk&productId=168768");
curl_setopt($ch, CURLOPT_COOKIEFILE, $file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
echo curl_exec ($ch);
?>
Avatar billede moddi100 Seniormester
12. december 2014 - 12:46 #6
For at teste nærmere og fjerne 403-fejlen, må du oprette et nyt test-login ligesom i dit gamle spørgsmål. Ellers kan vi blot gætte os frem til fejlen i blinde.
Avatar billede ClubAcedDK Nybegynder
16. december 2014 - 12:49 #7
Den melder desværre stadig "403 Forbidden" :(
moddi100 jeg har sendt dig et test-login, som jeg lader dig være aktivt i 3 dage, så du kan se om du kan få det til at virke :) Tak for hjælpen.
Avatar billede ClubAcedDK Nybegynder
18. december 2014 - 07:00 #8
moddi100 skriv et svar og pointene er dine :)
Avatar billede moddi100 Seniormester
20. december 2014 - 12:15 #9
God jul :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester