Получение вывода мусора при очистке веб-страницы в PHP - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь получить содержимое страницы из Amazon, используя file_get_html(), но вывод идет со странными символами на echo. Может кто-нибудь объяснить, как я могу решить эту проблему?

Я также нашел следующие два связанных вопроса о переполнении стека, но они не решили мою проблему. :)

  1. file_get_html () возвращает мусор
  2. Распаковать сжатый gzip http ответ

Вот мой код:

$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 эту проблему?

Обновление:

Я попробовал 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

Может кто-нибудь объяснить отрицательные голоса?

  1. Я провел исследование сам.
  2. Нашли несколько связанных вопросов по переполнению стека, которые не решили мою проблему.
  3. Предоставил всю информацию, которая, по моему мнению, была бы полезной.

Что еще я должен включить в вопрос?

Вот весь мой код для 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 Сервер: Тип содержимого сервера: text / html; кодировка = UTF-8 Строгая транспортная безопасность: максимальный возраст = 47474747; IncludeSubdomains; предварительная загрузка x-amz-id-1: 7A162B8JKV6MGZQ3PCH2 Зависит от: Accept-Encoding, User-Agent, X-Amzn-CDN-Cache-Кодировка содержимого: gzip x-amz-rid: 7A162B8JKV6MGZQ3PCH2 Cache-Control: без преобразования X-Frame-Options: SAMEORIGIN Дата: вс, 18 ноября 2018 22:42:51 GMT Transfer-Encoding: chunked Соединение: keep-alive Соединение: Набор Передачи-Кодировки-Cookie: х-WL-UID = 1a4u8 + XGF + IhFF / iavy9mKZCAA0g4HiIYZXR8hKjxGtmOtBW + j67wGABv7ZOTxDRcab + 7Qmpjqds =; Путь = /; домен = .amazon.in; истекает = вт, 01 января-2036 00:00:01 по Гринвичу Set-Cookie: session-id-time = 2082758401l; Путь = /; домен = .amazon.in; expires = вт, 01.01.2036 00:00:01 GMT Set-Cookie: Идентификатор сеанса = 260-6671998-9793112; Путь = /; домен = .amazon.in; истекает = вт, 01 января-2036 00:00:01 по Гринвичу

1 Ответ

0 голосов
/ 19 декабря 2018

Вот решение:

Я столкнулся с той же проблемой при очистке Amazon.Просто добавьте следующую опцию перед отправкой запроса cURL:

curl_setopt($handle, CURLOPT_ENCODING, 'gzip,deflate,sdch');
...