Intereting Posts
Правила Nginx для субдомена multisite install (Bedrock) Изменения в WordPress SimplePie как добавить дату истечения срока действия после заголовка сообщения WordPress – субдомен wp-admin Рассчитать процент сообщений по категориям Невозможно проверить вариант «Разрешить пользователям отправлять комментарии по новым статьям» Разделение WordPress на несколько областей Извлеките случайный комментарий из определенного сообщения, покажите его на домашней странице с коротким кодом Страница архива WordPress, показывающая 404 Ошибка Обновление метаданных с помощью save_post в многопользовательском режиме Создайте настраиваемый столбец столбца, путем персонализированного сообщения порядок родительских родительских стилей Ссылка на полный размер сообщения thumbnail Случайная загрузка ajax работает только с posts_per_page, установленным на -1 Самый чистый способ кодирования «Пользовательские панели записи / Мета-боксы»?

wp_remote_get () не правильно извлекает страницы

Я использую wp_remote_get() для извлечения разных страниц из Интернета. Это новостной сайт.

В большинстве случаев это работает успешно. Тем не менее, иногда запрос возвращает успех (код 200), но содержимое страницы отличается от страницы, которая извлекается клишером (содержимое страницы, возвращенной этим вызовом, является чем-то вроде строк «страница не найдена» «)

Однако, если я использую любой браузер для извлечения этой страницы, страница успешно возвращается.

Вот пример:

 // The following returns code 200, yet the returned page is different from the acual page that is accessed via the browser wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7"); 

ПРИМЕЧАНИЕ. Чтобы проверить, я просмотрел возвращенную страницу vie PHP и исходный код страницы через браузер, и они разные.

Я не уверен, в чем проблема. Я подозреваю, что это может быть связано с аргументами wp_remote_get() , однако документация о аргументах не ясна.

Это аргументы? Если да, то что и как их настроить? Если нет, что вы подозреваете в этой проблеме?


ВАЖНОЕ ОБНОВЛЕНИЕ И РЕШЕНИЕ

После прочтения комментария, сделанного zendka, в котором он заявляет: « Я получаю точно такой же контент. Я только что проверил и сравнил тело ответа с источником страницы браузера. Они идентичны 🙂 », я понял кое-что очень важное.

Исходный URL, который использовался в моем коде в wp_remote_get()http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا

И звонок будет таким же

 // Causes problems wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا"); 

URL, который используется и изначально описан в этом вопросе, был

 // Runs successfully wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7"); 

ПРИМЕЧАНИЕ СЛЕДУЮЩЕЕ:

  1. Чтобы URL-адрес работал с wp_remote_get() без каких-либо проблем или ошибок, он НЕ должен быть следующего формата: http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا но он должен быть закодирован следующим образом: http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7 .

  2. Причина, по которой wp_remote_get() не может работать с http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا потому что он неспособен справиться с этим utf8. Чтобы он работал правильно, только путь к URL-адресу должен быть преобразован в процент-кодированный формат. Более того, любой символ слэша (/) в пути не должен быть закодирован, иначе wp_remote_get() не сможет найти страницу, и, следовательно, мы получим код успеха (200) с 404 страницами. Поэтому этот формат http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7 правильно работает при передаче wp_remote_get() .

  3. Причина, по которой я сообщал о неправильных форматах, находится в разгар моего тестирования, я скопировал URL-адрес из Firefox и вставлял его здесь. Firefox автоматически преобразует форматирование в «правильный» формат. Подробности здесь: https://superuser.com/questions/480692/copying-unicode-symbols-from-firefox-address-bar-as-is

Решение

  1. Убедитесь, что URL имеет правильный процентный формат

  2. Используйте новый отформатированный URL-адрес с помощью wp_remote_get()

Полезные ресурсы

https://github.com/neitanod/forceutf8

https://stackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8

https://stackoverflow.com/questions/2742852/unicode-characters-in-urls

https://stackoverflow.com/questions/9831077/how-to-url-encode-only-non-ascii-symbols-of-url-in-php-but-leave-reserved-symbo

https://stackoverflow.com/questions/25465114/php-str-replace-not-working-with-special-chars

Solutions Collecting From Web of "wp_remote_get () не правильно извлекает страницы"

HTTP-запрос, отправленный wp_remote_get() , отличается от HTTP-запроса, отправленного браузером. Например, user-agent отличается (см. Документацию ). Некоторые веб-сайты по-разному реагируют на это. Второй аргумент wp_remote_get() позволяет изменить запрос.

Веб-сайты могут также реагировать по-разному в зависимости от IP-адреса или количества полученных запросов (обычно путем ограничения или запрета определенных шаблонов).

Кстати, я протестировал указанную вами страницу, и она работает для меня:

 wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");