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

12
R
На сайте с 22.12.2009
Offline
94
117
есть картинка  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
На сайте с 13.11.2011
Offline
140
#1

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


Когда-то здесь будет реклама.
R
На сайте с 22.12.2009
Offline
94
#2

это да

но как получить ссылку 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...

Евгений Крупченко
На сайте с 27.09.2003
Offline
178
#3

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


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


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

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

R
На сайте с 22.12.2009
Offline
94
#4

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

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

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

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

R
На сайте с 22.12.2009
Offline
94
#5
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  -  скачивает

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

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

VD
На сайте с 09.09.2019
Offline
34
#7
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 автоматом, хотя никакого редиректа там нет.

R
На сайте с 22.12.2009
Offline
94
#8
timo-71 #:

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

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

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

R
На сайте с 22.12.2009
Offline
94
#9

а это помогло

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
T7
На сайте с 19.09.2018
Offline
63
#10
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);

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий