Intereting Posts
Как работают детские темы? Редактор не загружается должным образом на моем самообслуживании WordPress 3.3 Использование параметров виджета «вне» виджета Я хочу попробовать связать ссылку со своим всплывающим надписью Отключить или заблокировать родительские страницы от редактирования в wordpress admin Процесс сохранения настроек триггера только с Javascript Пользовательский Post-to-Post с несколькими родителями? Как шаблоны страниц ссылок WordPress на отдельные страницы Как использовать элементы управления WordPress Customizer в типах сообщений Возврат одной персонализированной почты из нескольких мета-запросов Лучший способ отключить боковые панели на сообщениях (только)? Pagination не работает с query_posts () Количество почтовых сообщений категории день за днем Моя связующая форма URL-адреса в html для PHP не работает Делайте персонализированные типы сообщений и страницы удобными, re: rewrite

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");