Autor Zpráva
Nercom
Profil *
Načítám z XML různé URL adresy s obrázky, které potřebuji zpracovávat a narazil jsem nyní na problém. Několik URL adres je sice s HTTP, ale mají tam 301 přesměrování na HTTPS. Jak mohu CURL scriptu říci, aby v případě přesměrování data až po přesměrování získal.
Nyní místo zdrojáku pro obrázek získávám toto:

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

Můj CURL script:
$header=array(
  'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0',
  'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language: cs,en-us;q=0.7,en;q=0.3',
  'Accept-Charset: ISO-8859-1,windows-1250,utf-8;q=0.7,*;q=0.7',
  'Keep-Alive: 115',
  'Connection: keep-alive',);
$url_image = "http://slevoking.cz/images/static/2016-Azkc.jpg"; // příklad, který jsem našel pro použití
$ch = curl_init($url_image);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_ENCODING, '' );
$image_file = curl_exec($ch);
curl_close($ch);

Díky moc za rady.
juriad
Profil
To už jsi nastavil pomocí CURLOPT_FOLLOWLOCATION. Ten tvůj příklad přímo stáhne ten obrázek, bez 10. řádky to stáhne HTML stránku s přesměrováním.
mckay
Profil
Vzhledem k tomu, že tvrdíte, že Vám to nefunguje tak jak to máte, zkontroloval bych možné příčiny:
1. open_base_dir (php.ini) - pokud je vyplněn CURLOPT_FOLLOWLOCATION není povoleno
2. zapnutý safe_mode - taktéž nebude fungovat

Řešením pak bude buď použít jiný způsob získávání obsahu. Aby Vám to fungovalo s přesměrováním, je možné použít file_get_contents funkci s kontextem. Například takto:


$context = stream_context_create(
    array(
        'http' => array(
            'follow_location' => false
        )
    )
);

$pic = file_get_contents('http://www.example.com/', false, $context);  // Obsahuje obrázek

var_dump($http_response_header); // Hlavičky

Edit: Svět je strašně malý. Zrovna dnes jsem shodou okolností hledal něco s tímto souvisejícího.
mckay
Profil
Nemohu již upravit příspěvek, tak jen dodávám, že je třeba upravit hodnotu indexu follow_location z false na true (právě proto, aby to fungovalo pro Váš případ).

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: