помогите победить редиректы php curl


runseoman
74

есть картинка  http://dantonehome.com/upload/iblock…f458abcbce.jpg

заголовок (смотрю CURLINFO_HTTP_CODE)отдает 301 и редирект (смотрю CURLINFO_EFFECTIVE_URL) на  https://dantonehome.com/upload/ibloc…f458abcbce.jpg

а при открытии (в браузере)  https://dantonehome.com/upload/ibloc…f458abcbce.jpg идет редирект  https://www.dantonehome.com/upload/i…f458abcbce.jpg

не могу через curl выловить ссылку с www
кто подскажет? куда копать?


Delahoya

Так она хоть с www, хоть без 200 ОК отдает

помогите победить редиректы php curl

помогите победить редиректы php curl


runseoman

это да

но как получить ссылку https с www из ссылки http

<?

stream_context_set_default( [

‘ssl’ => [

‘verify_peer’ => false,

‘verify_peer_name’ => false,

],

]);

$filename=»http://dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg»;

$handle = curl_init($filename);

curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($handle);

$last_url = curl_getinfo($handle, CURLINFO_EFFECTIVE_URL);

echo $filename.»<br>»;

echo $last_url.»<br>»;

print_r(get_headers($last_url));

print_r(get_headers($last_url, 1));

$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);

echo $httpCode.»n»; //тут дает 301

$filename=$last_url;

$handle = curl_init($filename);

curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($handle);

$last_url = curl_getinfo($handle, CURLINFO_EFFECTIVE_URL);

print_r(get_headers($last_url));

print_r(get_headers($last_url, 1));

$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);

echo $httpCode; //тут дает 0

$ch = curl_init($filename);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch);

curl_close($ch);

file_put_contents(«test.jpg», $data);

?>

в чем тут косяк ?

надо на вход подать   http://dan… а получить как-то  https://www.dan…


Евгений Крупченко

Нет там никакого редиректа на www

помогите победить редиректы php curl

Открывается без www. Но обратите внимание на замочек.

помогите победить редиректы php curl

Все потому что сертификат у вас почему-то сделан только для www.

Предполагаю, ваш хитросделанный браузер самовольно решает средиректить на www. И естественно curl ничем таким не страдает, и ни на какое www не редиректит.


runseoman

сайт не мой, мне надо картинку получить

открываю в http://dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg в yandex browser
yandex browser переделывает в  https://www.dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg

ну ладно пусть браузер косячит, не суть

мне то средствами PHP получить файл конечный и скачать


runseoman

runseoman #:

сайт не мой, мне надо картинку получить

открываю в http://dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg в yandex browser
yandex browser переделывает в  https://www.dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg

ну ладно пусть браузер косячит, не суть

мне то средствами PHP получить файл конечный и скачать

вот код

$ch = curl_init($filename);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents(«test.jpg», $data);

если  $filename подставляю http — не скачивает
если  $filename подставляю https без www — не скачивает
если  $filename подставляю http c www  —  скачивает


timo-71

runseoman #:
мне то средствами PHP получить файл конечный и скачать
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

добавить. Ну или www к урлу


voronoff_dev

runseoman #:
если  $filename подставляю https без www — не скачивает

Потому что сертификат без www у них не действительный и нужно отключить его проверку в curl.

$ch = curl_init($filename);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents("test.jpg", $data);

А так вообще да, у меня хром тоже открывает ссылку с www автоматом, хотя никакого редиректа там нет.


runseoman

timo-71 #:

добавить. Ну или www к урлу

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

пробовал, не помогло


runseoman

а это помогло

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


timo-71

runseoman #:
пробовал, не помогло

Там было написано добавить. К тому что у вас было

runseoman #:

$filename=»http://dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg»;

$handle = curl_init($filename);

curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

Понятно, что и имена переменных привести в соответствие при этом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *