function curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/25.0.1"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, 'long cookie here'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $output = curl_exec($ch); curl_close($ch); return $output; }
Оригинальный url, который я кормлю, это http://example.com/i-123.html, но если я откроюсь в браузере, я перенаправляюсь на https://example.com/item-description-123.html (так Я добавил CURLOPT_FOLLOWLOCATION
).
Однако вывод этой функции – двоичные данные.
1f8b 0800 0000 0000 0003 ed7d e976 db38 f2ef e7f8 2930 9ac9 d86e 9b92 b868 f3a2 3e5e 9374 67fb c7ee 74f7 e4e6 f880 2428 31a6 4835 172f 3dd3 8f74 3fde 17b8 f7c5 6e15 008a 8ba8 2db1 3ce9 25a7 dba4 4810 ......
Как это исправить? Я попробовал добавить
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
(скопирован откуда-то). Не работает.
file_get_contents()
дает мне тот же результат.
Ну, решение было жалким …
С помощью wget -S http://example.com
я узнал, что содержимое сжато (gzipped). Используя gunzip
я успешно извлек html.
Также добавлен в исходный PHP-скрипт
curl_setopt($ch,CURLOPT_ENCODING , "");
И это сработало как шарм.