Я делаю веб-приложение на PHP и хочу читать контент из другого домена. Похоже, что мои основные варианты – fopen
и curl
.
Каковы основные различия между этими двумя методами, особенно в отношении безопасности и доступных опций?
Имеет ли значение, является ли URL-адрес http или https-сайтом?
Curl использует внешнюю библиотеку, и у нее гораздо больше возможностей для настройки запросов – настраиваемых заголовков, генерирования запроса POST, загрузки файлов. Все, что нужно, я должен сказать.
Fopen ограничен только для того, чтобы просто сделать запрос GET URL без дополнительной настройки.
Что касается безопасности, то на CURL не влияет конфигурация безопасности на PHP (например, запрещенная локализация удаленных URL-адресов и т. Д.).
Обе возможности возвращают вам данные, которые вы можете использовать всеми возможными способами. Если вы создаете дыру в вашем проекте, после получения данных ваша ошибка в конце концов.
Также я не совсем уверен, но я думаю, что fopen не может обрабатывать соединения SSL (https). И fopen, и CURL поддерживают SSL (как заметил Энди Шеллам в комментарии ниже).
См. Какие важные различия между использованием fopen ($ url) и curl в PHP? для некоторых параметров безопасности, которые влияют на fopen, а именно allow_url_include.
Также обратите внимание, что с помощью curl, если вы устанавливаете CURLOPT_FOLLOWLOCATION, тогда curl следует за перенаправлениями в файл: // для извлечения данных (все еще зависит от open_basedir). Перенаправление на другие схемы, такие как ftp: //, может быть хуже (не проверял ftp: //). Без этого setopt curl не будет следовать перенаправлениям вообще. fopen работает с 302 по умолчанию, но только http: // -> http: //, а не http: // -> file: //.