Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjan varaaminen kirjaston sivuilta ohjelmalla

Sivun loppuun

riksu [23.10.2015 16:59:50]

#

Tavoiteeni on oppia ohjelmointia, mutta en tiedä, miten tehdä yksinkertainen ohjelma vaikka olen yrittänyt oppia ohjelmointiputkassa.

Ohjelman pitäisi mennä kirjaston (Salomo) sivuille ja varata sieltä haluttu kirja (PHP, tekijä Zandstra, Matt).

Saisinko jotain vinkkejä, käyttäen PHP-kieltä:

1. miten siirrytään ko. sivulle,
2. miten käyttää hyväksi sivulla olevia linkkejä (tavallisesti klikatan hiirellä)
3. miten tiedon hakuun syötetään kirjan tiedot (tavallisesti näppäillään kirjaimia)

peran [23.10.2015 17:43:45]

#

Ei varmaan parin viikon takia kannata sinne tehdä ohjelmaa...

Salomo.fi kirjoitti:

SALOMO-verkkokirjasto sulkeutuu 9.11.2015

riksu [23.10.2015 18:25:29]

#

Tässä tapauksessa ajalla ei ole merkitystä. Haluan vaan oppia ohjelmointia ja haluan tiedä, millaisia käskyjä pitää käyttää, jottaa pääsen vieralle sivulle etsimään tietoa käyttämällä sivuston komentoja.

The Alchemist [23.10.2015 18:51:15]

#

Aivan tavallisia http-pyyntöjähän ne käyttävät ja "lomakedataa" syövät. Surffailet siis siellä verkkokirjaston puolella ja katsot, minkänimisiä kenttiä lomakkeilla on ja lähetät vastaavilla nimi-arvo-pareilla dataa palvelimelle lomakkeen käsittelevään osoitteeseen.

Post-pyyntöjen tekeminen on triviaalia millä vain http-kirjastolla (esim. ZF2). Raakaa curlia joku varmaan kohta suosittelee, mutten itse lähtisi siihen, koska nuo vanhat c-tyyliset rajapinnat ovat menneiltä ajoilta, ja nyky-php:tä voi koodata sivistyneemminkin.

Ainoa vaikeus on oikeastaan siinä, että mikäli lomakkeet käyttävät csrf-suojausta, niin joudut hakemaan lomakkeen normaalisti get-pyynnöllä ja parsimaan siitä kyseisen csrf-avaimen, jota käyttämällä pystyy tämän jälkeen lähettämään dataa.

peran [23.10.2015 18:54:51]

#

Ei ehkä kannata aloittaa ohjelmointia noin vaikealla.

Kokeile ensin tutkia php:llä toteutettuja sivujen html-koodia (Firefox CTRL+U).

Ja tee html-koodia soveltaen oma sivusi.

Sen jälkeen, kun se alkaa luistaa, niin voit perehtyä php-oppaisiin esim.

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=php_01

Metabolix [25.10.2015 09:45:04]

#

Ei tuo nyt kauhean vaikea ole. Tietenkin ohjelmoinnin perusteita kannattaa ensin opetella, mutta jos järki riittää soveltamiseen (toki kaikilla ei riitä), tarvitsee vain muokata koodivinkkiä cURLilla kirjautumisesta.

riksu [27.10.2015 20:28:25]

#

Yritin käynnistää Metabolixin koodivinkkiä cURLilla kirjautumisesta ja katsoa, miten see toimii. Ennen kokeilua liitin seuraavan rivin ( laheta_fonecta_sms("omatunnus", "omasalasana", "omanumero", "Hei!"); )ohjelman loppuun, jotta ohjelman voisi käynnistää. Luulin sen olevan tarpeellinen.
Mutta tuli virheilmoitus: Notice: Kirjautuminen epäonnistui! in C:\palvelin\xampp\htdocs\myfiles\ohjelmointiputka\kirjautuminen\kayttajanimi.php on line 38.

Mistä mahtaa johtua? Tunnus ja salasana ovat oikein. Voisko sivuston muutos sitä aiheuttaa? Jos näin, niin pitääkö ohjelmaa jotenkin korjata?

Metabolix [27.10.2015 20:53:21]

#

Ehkä olet syöttänyt jonkin tiedon väärin. Omilla tunnuksillani koodi toimii. Tarkista tunnuksesi, ja tarkista myös, saatko ylipäänsä lähetettyä Fonectan sivuilta tekstiviestejä (selaimella).

riksu [28.10.2015 07:49:08]

#

Samoja tunnuksia käytän ohjelmassa, millä pääsen kirjautumaan selaimelle, tässä ei mielestäni ole virhettä.
Mutta en lõytänyt, mistä paikasta pystyy lähettämään tekstiviestejä selaimella. Sitä asiaa haluaisin kokeilla.

Grez [28.10.2015 09:50:16]

#

Periaatteessa "tunnukset, millä pääsen kirjautumaan selaimelle" kuulostaa koneen käyttäjätunnuksilta. Mutta jos kuitenkin tarkoitit että tunnukset, joilla pääset kirjautumaan selaimella fonectan palveluun, niin OK.

Kun olet kirjautunut Fonectaan omilla tunnuksilla, niin voit ainakin hakea ihmisiä ja lähettää löytyneille tekstiviestin (lähetä tekstiviesti-linkistä). Äkkiseltään en itsekään keksi muuta keinoa miten Fonectan sivuilla saa normaalisti lähetettyä tekstiviestejä.

riksu [28.10.2015 10:50:01]

#

Kyselin asiakaspalvelusta asiasta, sanottiin, että ilman numerohakua ei ole mahdollista lähettää viestiä. Ehdotin sitten parannusta, että voisi lähettää tekstarin ilman numeron hakua. Lupas laittaa ehdotuksen eteenpäin.

Mutta onko mahdollista, että jos tunnukset ovat oikein ja puhelinnumero, mihin laitetaan viesti on salainen tulee virheilmoitus: Notice: Kirjautuminen epäonnistui!

Lisäys: Minua se viestin lähettäminen ei kiinnosta vaan haluaisin karsia ohjelmasta sen pois ja muokata ohjelman sellaiseksi, että sillä pystyisi kirjautumaan mihin vaan sivustolle muuttamalla vain tunnuksen ja salanan, mutta osaamiseni ei riitä. Tämä on varmaankin helppoa osaajalle. Sen lisäksi haluaisin oppia keräämään tietoa ja tallettamaan tiedon levylle. Se ei pitäis olla kovin vaikea?

Grez [28.10.2015 12:46:27]

#

Sieltä pitää lähettää kerran varmistusviesti omaan puhelimeen ennen kuin viestejä voi lähetellä muille. Se järjestelmä ilmoittaa siitä kun ekan kerran koittaa lähettää viestiä.

Periaatteessa tulisi mieleen, että jos ko. varmistusta ei ole ollenkaan tehty, niin voisi tulla tuo "Notice: Kirjautuminen epäonnistui", koska tuo koodi ei luultavasti osaa varautua siihen.

Eli kokeile ensin hakea vaikka oma numero ja lähettää viesti siihen, josko sen jälkeen toimisi tuo systeemikin.

riksu kirjoitti:

muokata ohjelman sellaiseksi, että sillä pystyisi kirjautumaan mihin vaan sivustolle muuttamalla vain tunnuksen ja salanan, mutta osaamiseni ei riitä. Tämä on varmaankin helppoa osaajalle. Sen lisäksi haluaisin oppia keräämään tietoa ja tallettamaan tiedon levylle. Se ei pitäis olla kovin vaikea?

Periaatteessa ei ole mahdollista tehdä tuollaista ohjelmaa, koska kaikkien sivujen kirjautumissysteemi ei ole samanlainen. Eli tunnuksen ja salasanan lisäksi tarvitsee kertoa ohjelmalle myös miten kirjautuminen tapahtuu. Eli mihin kenttiin tunnukset laitetaan ja mihin osoitteeseen kirjautumistiedot lähetetään. Tai no tietty tekoälyllä voisi varmasti valtaosalla sivuista päätellä mihin tulee käyttäjätunnus ja mihin salasana.

On myös sivustoja joissa lähetetään ensin tunnus ja sitten vasta seuraavalla pyynnöllä salasana. Kaikissa sivustoissa ei riitä edes että tallentaa evästeet vaan täytyy välitellä jotain kirjautumisavainta sivulatauksesta toiseen.

riksu [28.10.2015 13:20:32]

#

Grez kirjoitti:

Eli kokeile ensin hakea vaikka oma numero ja lähettää viesti siihen, josko sen jälkeen toimisi tuo systeemikin.

Sitä just ennen yritin, mutta numeroa ei löytynyt.

Grez kirjoitti:

Eli tunnuksen ja salasanan lisäksi tarvitsee kertoa ohjelmalle myös miten kirjautuminen tapahtuu.

Mutta miten yleensä ne vieraan sivuston lomakekentät määritellään, mihin tunnukset syötetään? Kun näkee jonkun sivuston niin pitäisi jotenkin saada kentät määritelty. Oletuksena on että tunnuksen- ja salasanakenttä ovat samalla sivulla.

Grez [28.10.2015 13:33:37]

#

riksu kirjoitti:

Mutta miten yleensä ne vieraan sivuston lomakekentät määritellään, mihin tunnukset syötetään? Kun näkee jonkun sivuston niin pitäisi jotenkin saada kentät määritelty. Oletuksena on että tunnuksen- ja salasanakenttä ovat samalla sivulla.

Ei siihen ole mitään standardia käytäntöä, joten kukin määrittelee miten huvittaa. Helpostihan ne saa katsottua sivulta, että miten ne on satuttu toteuttamaan.

riksu [28.10.2015 13:47:21]

#

Entäs, kun katsotaan vaikka sitä Fonectan sivustoa ja Metabolixin tekemää ohjelmaa sille sivulle kirjautumisesta. Hän on laittanut sinne hyviä kommentteja. Mutta tarvitsen vielä lisää selvennystä(kommentteja ohjelmaan), miten ohjelma löytää oikeat kentät ja miten sen jälkeen näihin syötetään tunnukset? cURLin käyttö on minulle vähän sekavaa.

Grez [28.10.2015 14:15:35]

#

Ei sen ohjelman tarvitse "löytää" mitään kenttiä, koska ohjelman tekijä on jo "löytänyt" ne kentät ja on koodissa kirjoittanut minkä nimiset ne kentät ovat.

Eli ota sivu x, avaa selaimen debug-konsoli ja katso mitä tietoa selain lähettää sivulle kun kirjaudut.

Esimerkiksi kirjauduin äsken putkaan ja tältä näyttää sivupyynnöt mitä selaimeni (chrome) teki putkan palvelimelle. Ensimmäisenä on siis ladattu sisaan.php johon on lähetetty kentässä nimeltä "tunnus" arvo "Grez" ja kentässä nimeltä "salasana" arvo "!7A*************1Y".

Kuva

Nuo "tunnus" ja "salasana" on siis olleet sellaisia kentän nimiä, jotka ohjelmointiputkan kirjautumisrutiinin ohjelmoijan mielestä on olleet hyvät.

The Alchemist [28.10.2015 15:04:25]

#

riksu kirjoitti:

Mutta miten yleensä ne vieraan sivuston lomakekentät määritellään, mihin tunnukset syötetään? Kun näkee jonkun sivuston niin pitäisi jotenkin saada kentät määritelty. Oletuksena on että tunnuksen- ja salasanakenttä ovat samalla sivulla.

Mikäli nyt oikeasti haluat lähteä tällaista automatiikkaa tekemään, niin helpoin tapa lienee etsiä lomakkeelta salasanakenttä (input[type="password"]) ja sen jälkeen poimia sitä edeltävä tekstikenttä käyttäjänimeksi. Jotenkin noin myös selainten salasanojen tallentaminen luultavasti toimii; en ole tutkinut asiaa.

Lebe80 [29.10.2015 10:07:14]

#

Eikö niitä kenttien nimiä voi ns. kovakoodata? Tuskin noita kenttien nimiä kuitenkaan luodaan dynaamisesti ihan joka latauskerralla.

riksu [03.11.2015 22:41:20]

#

Grez kirjoitti:

Eli ota sivu x, avaa selaimen debug-konsoli ja katso mitä tietoa selain lähettää sivulle kun kirjaudut.

Haluaisin löydä Salomon sivuston tunnuksen ja salasanan kenttien nimet sisäänkirjautumista varten, mutta en osaa. Onko ne jotenkin piilossa? Käytän Firefoxia. Miten löydäisin selaimelta helposti tunnuksen ja salasana kentän nimen? Kirjautuminen käsin tapahtuu "Omat tiedot" linkin kautta.

Metabolix [03.11.2015 23:20:10]

#

Mene kirjautumissivulle ja katso sivun HTML-koodia (esim. selaimen valinnalla ”Näytä sivun lähdekoodi” tai F12-näppäimestä aukeavan konsolin kautta tai hiiren kakkospainikkeesta aukeavan valikon kohdasta ”Tarkastele elementtiä”). Katso kenttien nimien lisäksi lomakkeen lähetysosoite (form-elementin action-attribuutti).

riksu [06.11.2015 13:41:29]

#

Kiitos, Metabolix, yritin ottaa perusasiat huomioon ja tehdä analoogisesti kirjautumisen Salomoon, mutta jostakin syystä ohjelma hyväksy mikä tahansa tunnuksen ja salasanan.
Ohjelma itse on seuraavanlainen:

<?php
function kirjautuu_ohjelmointiputkaan($tunnus, $salasana) {

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, "PHP");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FAILONERROR, 1);
	curl_setopt($ch, CURLOPT_ENCODING, "");
	curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
	curl_setopt($ch, CURLOPT_COOKIEJAR, "/dev/null");
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

	curl_setopt($ch, CURLOPT_REFERER, "http://www.salomo.fi/");
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array("tunnus" => $tunnus, "salasana" => $salasana)));
	curl_setopt($ch, CURLOPT_URL, "http://www.salomo.fi/asiakaslogin.asp");
	$tmp = curl_exec($ch);
	if ($tmp === false || strpos($tmp, "Kirjautuminen epäonnistui") !== false) {
		$ok = false;
		trigger_error("Kirjautuminen epäonnistui!");
	} else {echo ("Sisäänkirjautuminen onnistui!");

	}
	curl_close($ch);
	return $ok;
}
kirjautuu_ohjelmointiputkaan("oma tunnus", "oma salasana");
?>

Mikä on mennyt vikaan?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta