Tarkoituksena on tallentaa localhostille tietokantaan lähipäivien tv-ohjelmat mm. omien toiveiden mukaisten tietojen listaus-, haku-, sorttaus- ja korostusominaisuuksien takia. Tämähän on periaatteessa oikein simppeliä, mutta törmäsin ongelmaan, joka ei ainakaan vielä ratkennut. Selaimella avattaessa lähdetiedosto (DNA:n ohjelmaopas json-muodossa, esim. Yle TV1) toimii ihan oletusten mukaisesti, mutta php-koodilla haettaessa vastapuoli palauttaa virheilmoituksena
HTTP request failed! HTTP/1.1 426 Upgrade Required
Ensin ajattelin, että joku ominaisuus ei vain toimi omalla koneellani, joten kokeilin tuota webhotellissakin samoin tuloksin. Nyt en keksi mikä upgrade vaaditaan ja mihin versioon. Kokeilin jo laittaa php-koodin alkuun
stream_context_get_default(["http" => ["protocol_version" => 2.0]]);
mutta ei vaikutusta, joten ilmeisesti joko tuosta ei ole kyse tai kokeilin jotain väärää versiota. Olisiko jollain antaa vinkkiä miten sivun saisi luettua php-koodilla?
Ilmeisesti pitää käyttää cURL-kirjastoa.
HTML5 kirjoitti:
Ilmeisesti pitää käyttää cURL-kirjastoa.
Kiitos vinkistä. Pikaisesti testattuna ihan näinkin yksinkertainen netistä löytynyt koodi antaa halutun vastauksen:
function get_data($url) { $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec($ch); curl_close($ch); return $data; }
Kannattaisi varmaan oikeasti tarkistaa lähtövaatimukset lottoamisen sijaan. Vaadittu HTTP-protokollan versio on 1.1. Curlia ei ole pakko käyttää, kun nämä perusasiat onnistuvat myös file_get_contentsilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.