Autor Zpráva
MartinMa
Profil *
Ahoj, prosím o pomoc.

pomocí file_get_contents() stahuji XML z níže uvedené adresy, které následně zpracovávám.
Roky to fungovalo dobře. Jediné, co bylo potřeba upravit v PHP, byl User Agent a certifikáty.

ini_set('user_agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0');
$certifikat = stream_context_set_default(array('ssl'=>array('verify_peer'=>true, 'verify_peer_name'=>true, 'cafile'=>'/home/www/moje-domena.cz/www/moje-domena.cz/scripts/cacert.pem')));

$url = "https://www.chmi.cz/files/portal/docs/meteo/om/bulletiny/XOCZ50_OKPR.xml";  
$xml = file_get_contents($url);

Nyní file_get_contents() vrací chybu - Cannot open stream.


Když vypíšu hlavičky:
print_r(get_headers($url));
// Vrátí to chybu 404 Not Found

Znamená to tedy, že vzdálený server blokuje přístup ze skriptů, protože v prohlížeči ta stránka funguje.
Pomocí Dev Tools v prohlížeči jsem prověřil, že adresa se nikam nepřesměruje.


Jako poslední záchranu jsem zkoušel cURL s hlavičkami, které posílá prohlížeč, ale ani to nevyřešilo problém…
…

curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0",
    "Accept: application/xml,text/html;q=0.9,*/*;q=0.8",
    "Accept-Language: cs",
    "Referer: https://www.chmi.cz/"
]);
…


Poradíte prosím někdo, jak to vyřešit?

Děkuju moc,
Martin
Davex
Profil
S vynecháním nastavení 'cafile'=>'/home/www/moje-domena.cz/www/moje-domena.cz/scripts/cacert.pem' to chodí.
MartinMa
Profil *
Bohužel odebrání certifikátu vůbec problém neřeší.
PHP stále to hlásí, že soubor není dostupný (po zadání adresy přímo v prohlížeče soubor dostupný je)...

Toto hlásí PHP get_headers($url):
Array
(
    [0] => HTTP/1.1 404 Not Found
    [1] => date: Sat, 13 Dec 2025 20:15:25 GMT
    [2] => server: Apache
    [3] => content-type: text/html
    [4] => content-length: 1769
    [5] => vary: Accept-Encoding
    [6] => last-modified: Tue, 04 Nov 2025 10:50:02 GMT
    [7] => etag: "6909da5a-6e9"
    [8] => access-control-allow-origin: *
    [9] => accept-ranges: bytes
    [10] => connection: close
)
tttttttttt
Profil *
MartinMa:
Server vrací tyhle hlavičky.
(
    [0] => HTTP/1.1 200 OK
    [1] => date: Sun, 14 Dec 2025 00:57:44 GMT
    [2] => content-type: text/xml; charset=utf-8
    [3] => last-modified: Sat, 13 Dec 2025 09:16:23 GMT
    [4] => vary: Accept-Encoding
    [5] => etag: W/"693d2ee7-19016e"
    [6] => cache-control: max-age=60
    [7] => age: 0
    [8] => x-cache: HIT
    [9] => x-served-by: ng-w4
    [10] => accept-ranges: bytes
    [11] => content-length: 1638766
    [12] => connection: close
)
Odmítání skriptů mi moc nesedí, Apache, 404 a jiné hlavičky jsou podezřelé. Myslím si, že se bavíš i jiným serverem. Podívej se na síťový provoz třeba ve WireSharku nebo ten skript zkus spustit jinde.
MartinMa
Profil *
Děkuji za odpovědi.
Ale záhada stále pokračuje.


Když na sdíleném hostingu (Český hosting, PHP 8.4) zadám get_headers() toho xml souboru, tak dostanu odpověď HTTP/1.1 404 Not Found.
Když tam zadám get_headers() serveru (www.chmi.cz), tak dostanu HTTP/1.1 200 OK.


To samé jsem zkusil na lokálním webserveru na Raspberry (Lighttpd, PHP 8.4) - a zde u souboru i serveru dostanu HTTP/1.1 200 OK.


V čem by tedy mohl být problém? Že by server blokoval IP Českého hostingu? Nebo nějaké nastavení na hostingu? allow_url_fopen mám povolené.
tttttttttt
Profil *
Server chmi.cz blokuje IP, hosting blokuje připojení k serveru, nebo je někde nastavené něco typu proxy. Tipuju to první. Můžeš vyzkoušet jiné adresy na chmi.cz, napsat na podporu nebo si zkusit hrát s certifikáty – pokud nastavíš CA DigiCertu, kterou používá chmi.cz, měl bys od www.chmi.cz pořád dostat 404 a od jiných serverů chybu při handshaku. Pokud bys nekomunikoval s www.chmi.cz, dostaneš chybu při handshaku i pro www.chmi.cz.
Davex
Profil
Od konce listopadu 2025 má ČHMÚ nový web, který se zdá ne zcela odladěný, protože často chybuje (504 Gateway Time-out). Předpokládal bych, že se mohly změnit URL těch dat co stahuješ a hledal bych je nově na opendata.chmi.cz.

Odhadoval bych, že někomu to funguje a jinému ne, protože: uživatelům bude postupně spouštěn ve třech fázích. Pro všechny uživatele bude dostupný nejpozději na konci roku 2025. (zdroj ČHMÚ spouští nový web: přehledný design a responzivita)


Ten tvůj soubor je asi teď tu vystrahy-cr.chmi.cz/data/XOCZ50_OKPR.xml
MartinMa
Profil *
Davex:
Děkuji, mistře!
Je to opravdu tím, že novou verzi webu nasazují postupně. Moje lokální zařízení mají pořád přístup na starou, ale hosting už přistupuje na novou verzi, kde je soubor na jiné adrese (na te, kterou jsi napsal).

VELICE DĚKUJI.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0