Hei, täältä kun löytyy paljon taidokkaita kavereita ja kaikkeen on ratkaisu löytynyt tätä kautta, niin kysyisin neuvoa seuraavaan.
Yritän soveltaa Metabolix:n kirjoittamaa koodivinkkiä: Kirjautuminen toiselle sivustolle cURLilla.
Sivu johon yritän kirjautua näytää lähdekoodiltaan seuraavalta:
<?xml version="1.0" encoding="ISO-8859-1" ?><!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><title>ELKO Living System WebSceneView</title><link rel="stylesheet" href="styles/demo.css" type="text/css" media="handheld, screen, projection" /><script language="javascript" src="js/demo.js" type="text/javascript"> </script><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr valign="top"><td nowrap="nowrap"><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr style="background-image: url(gfx/top_background.gif); background-repeat: repeat-x"><td align="left" height="35"><a href="MainPage.ijp"><img border="0" height="35" style="z-index:10" align="middle" src="gfx/top_logo_ELKOFI.gif" alt="LK" title="Takaisin yleisnäkymään..."/></a></td><td height="35" valign="middle" nowrap="nowrap"> <strong><font size=3>ELKO Living System WebSceneView</font></strong></td><td height="35" width="100%"> </td></tr></table></td></tr><tr><td> </td></tr><tr valign="top" ><td><form method="post" action="Login.ijp"><input name="action" type="hidden" value="login"/><table class="logintable" margin="3px" cellpadding="0" cellspacing="0" ID="Table1"><tr><td colspan='2' style='text-align:center'><b>Sisäänkirjautuminen</b></td></tr><tr><td> </td></tr><tr><td>Käyttäjänimi:</td><td><input class="inputfield" name="login" type="text" id="login"/></td></tr><tr><td>Salasana:</td><td><input class="inputfield" name="password" type="password" ID="password"/></td></tr><tr><td>Kieli:</td><td><select name='language'><option value='fi' selected='selected'>Suomi</option><option value='en'>English</option><option value='sv'>Svensk</option><option value='no'>Norsk</option></select></td></tr><tr><td>Muista sisäänkirjoittautuminen:</td><td><input type='checkbox' name='remember'></input></td></tr><tr><td/><td align="center" ><input class="loginbutton" name="submit" value="Sisäänkirjautuminen" type="submit"/></td></tr><tr><td> </td></tr></table></form></td></tr><tr><td height="*"></td></tr><tr><td height="21" ><div id="bottom"><a href="http://www.elko.fi">ELKO</a></div></td></tr></table></body></html>
Koodi jolla kokeilen kirjautua näyttää seuraavalta:
<?php $tiedot = haeSivu("admin", "admin"); function haeSivu($tunnus, $salasana) { // Kirjautumislomakkeen POST-data; kentät selviävät lomakkeen HTML-koodista. $post = array("login" => $tunnus, "password" => $salasana); // cURLin alustus $ch = curl_init(); // Käsketään cURLin palauttaa data muuttujaan eikä tiedostoon. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Laitetaan evästeet käyttöön. Evästetiedosto on pakko // valita, mutta UNIXeissa /dev/null ja Windowsissa NUL // saa aikaan, että evästeitä ei tallenneta levylle. // Jos kumpikaan näistä ei jostain syystä toimi, // voi valita muunkin tiedoston, jolloin kannattaa lisätä // tämän funktion alkuun ignore_user_abort(true); ja // loppuun unlink("tiedostonimi"); curl_setopt($ch, CURLOPT_COOKIESESSION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, "NUL"); // Otetaan SSL-sertifikaatin tarkistus pois, koska Lyyran // sertifikaatti ei Windowsissa vaikuta kelpaavan. curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); //TÄMÄN KUN MUUTTAA -> 1, $str ON FUNKTION LOPUSSA TYHJÄ //Ensimmäinen pyyntö: kirjautuminen alussa asetetulla POST-datalla. curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_URL, "https://192.168.0.2/sceneview/Login.ijp"); curl_exec($ch); // Toinen pyyntö: haetaan saldosivu GET-pyynnöllä muuttujaan $str. curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_URL, "https://192.168.0.2/sceneview/MainPage.ijp"); $str = curl_exec($ch); // Data on haettu, suljetaan cURL. curl_close($ch); echo $str; } ?>
Vastaus minkä tämä scripti echottaa näyttää seuraavalta
<HTML><HEAD><TITLE>501 Not implemented</TITLE></HEAD><BODY BGCOLOR="#F1D0F2"><H2>501 Not implemented</H2><HR><ADDRESS><A HREF="http://tjws.sourceforge.net">Rogatkin's JWS based on Acme.Serve $Revision: 1.39 $</A></ADDRESS></BODY></HTML>
Toinen vastaus on sitten tyhjä, siis "" jos siis laittaa CURLOPT_SSL_VERIFYPEER Trueksi.
Onko mestareilla ehdotuksia viaksi?
Ainakin koodistasi puuttuvat lomakkeen kentät action=login ja language=fi. Jos nuo eivät auta, ongelmaa on hyvin vaikea arvailla: koodi toimii sinänsä täysin oikein, ja kysymys on vain siitä, vastaako pyyntö sitä, mitä nettisivu odottaa. Voit parhaiten tutkia asiaa niin, että seuraat selaimen kehityskonsolista, millaisia pyyntöjä kirjautumisvaiheessa normaalisti liikkuu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.