Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Arvostele pelit
15.8. klo 12 mennessä!

Keskustelu: Nettisivujen teko: file_get_contents hakee vain osan sivusta

Sivu 1 / 1

viljami [19.03.2018 14:22:18]

#

Hei, osaisiko joku kertoa miksi alla oleva koodin pätkä on pelannut monta vuotta ongelmitta, mutta nyt ei enää pelaa. Näyttää vain noin 300 ensimmäistä riviä.

Jos taas menen selaimella tuolle sivulle ja copy&pastean lähdekoodin tiedostoon ja pistän file_get_contens:lle parametriksi tiedoston, niin kaikki toimii ok.

Perässä mulla on tässä siis parseri, millä haetaan ylin ja alin lämpötila, jne...

$url = "http://www.foreca.fi/Finland/Helsinki/tenday/";
$str = file_get_contents($url);
echo $str;

Lebe80 [19.03.2018 15:23:38]

#

Pätkäiseekö tuo sisällön varmasti noin 300 rivin jälkeen, vai onko sivulla jotain, ettei skriptisi vain osaa näyttää sitä?

Onko mahdollista, että sivuille on myös laitettu esto, ettei tietyillä user-agenteilla näytetä koko sivua?

Metabolix [19.03.2018 23:18:50]

#

Ongelma on siinä, että PHP käyttää oletuksena HTTP/1.0-protokollaa mutta tuo palvelin ei enää tue sitä vaan palauttaa jotenkin vajaan sivun.

Ongelman voi todeta myös esimerkiksi curl-ohjelmalla:

curl -0Lso- http://www.foreca.fi/ | wc -c # HTTP/1.0, 16142 tavua
curl -1Lso- http://www.foreca.fi/ | wc -c # HTTP/1.1, 72593 tavua

Ongelma ratkeaa, kun PHP:n laittaa käyttämään HTTP/1.1-protokollaa. Asetuksen voi laittaa kaikkialle käyttöön näin:

stream_context_get_default(["http" => ["protocol_version" => 1.1]]);

viljami [20.03.2018 08:38:27]

#

Hei. Nythän se sitten alkoi heti toimimaan.

Tilanne hämäsi minua, koska sivu ei päällepäin ole muuttunut yhtään, mutta yhtäkkiä ei enää toiminut. Ainoa mikä siis tuli mieleen, että sivun tarjoajan on täytynyt muuttaa jotakin.

Itse testasin myös saman curlilla ja fopenilla. Kaikilla sama tulos.

En olisi kyllä tämän jäljille päässyt, jos en olisi tähän ratkaisua täältä saanut. Iso kiitos!

Vastaus

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

Tietoa sivustosta