Я пытаюсь получить содержимое страницы с Amazon, используя file_get_html()
, но на выходе echo
появляются странные символы. Может ли кто-нибудь объяснить, как я могу решить эту проблему?
Я также нашел следующие два связанных вопроса о переполнении стека, но они не решили мою проблему. :)
- file_get_html() возвращает мусор
- https://stackoverflow.com/questions/8895852/uncompress-gzip-compressed-http-response/10105319#10105319
Вот мой код:
$options = array(
'http'=>array(
'header'=>
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
"Accept-language: en-US,en;q=0.5\r\n" .
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6\r\n"
)
);
$context = stream_context_create($options);
$amazon_url = 'https://www.amazon.com/my-url';
$amazon_html = file_get_contents($amazon_url, false, $context);
Вот что я получаю:
��T]o�6}��`���0��݊-��"[�bh�tN�b0��.%%�$P��@�(Ų�� ������F#����A�
около 115 тыс. таких символов отображаются в окне браузера.
Это мои новые заголовки:
$options = array(
'http'=>array(
'header'=>
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
"Accept-language: en-US,en;q=0.5\r\n"
)
);
Решит ли использование cURL эту проблему?
Обновлять:
Я пробовал кУРЛ. Все еще получаю вывод мусора. Вот заголовки моих ответов:
HTTP/1.1 200 OK
Date: Sun, 18 Nov 2018 20:29:28 GMT
Server: Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.5
X-Powered-By: PHP/7.2.5
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Кто-нибудь может объяснить отрицательные голоса?
- Я сам провел исследование.
- Нашел несколько связанных вопросов о переполнении стека, которые не решили мою проблему.
- Предоставил всю информацию, которая, как мне казалось, будет полезна.
Что еще я должен включить в вопрос?
Вот весь мой код для curl на данный момент. Это URL, который я собираю.
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $amazon_url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($handle);
curl_close($handle);
echo $data;
Вывод — это просто набор символов, о которых я упоминал выше. Вот заголовки моих запросов:
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: AMCV_17EB401053DAF4840A490D4C%40AdobeOrg=-227196251%7CMCIDTS%7C17650%7CMCMID%7C67056225185486460220940124683302119708%7CMCAID%7CNONE%7CMCOPTOUT-1524907071s%7CNONE; mjx.menu=renderer%3ACommonHTML; _ga=GA1.1.2019605490.1529649408; csm-hit=adb:adblk_no&tb:s-3521C4J8F2EP1V0MMQEP|1542578145652&t:1542578146256
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Это из вкладки «Сеть». Заголовки ответа такие же, как я упоминал выше.
Вот результат после добавления curl_setopt($handle, CURLOPT_HEADER, 1);
в мой код:
HTTP/1.1 200 OK Сервер: Server Content-Type: text/html; charset = UTF-8 Strict-Transport-Security: max-age = 47474747; включать поддомены; preload x-amz-id-1: 7A162B8JKV6MGZQ3PCH2 Варьируется: Accept-Encoding, User-Agent, X-Amzn-CDN-Cache Content-Encoding: gzip x-amz-rid: 7A162B8JKV6MGZQ3PCH2 Cache-Control: без преобразования X-Frame- Параметры: SAMEORIGIN Дата: Воскресенье, 18 ноября 2018 г. 22:42:51 GMT Передача-кодирование: chunked Соединение: keep-alive Соединение: Transfer-Encoding Set-Cookie: x-wl-uid=1a4u8+XgF+IhFF/iavy9mKZCAA0g4HiIYZXR8hKjxGtmOtBW+j67wGABv7ZOTxDRcab +7Qmpjqds=;
curl_setopt($handle, CURLOPT_HEADER, 1);
где-нибудь перед curl_exec, чтобы ответ содержал заголовки ответа от Amazon, и тогда мы сможем увидеть, возможно ли мое предположение. - person p0358   schedule 19.11.2018