Периодически бывает нужно скачать какой-нибудь файл из сети или выполнить запрос к API и всегда встает вопрос "Чем?".
[spoiler]
Проблем на самом деле 2 (по крайней мере у меня в голове):
И вот тут обычно возникает желание написать свой велосипед. Когда в очередной раз у меня возникло такое желание наткнулся на замечательный класс в новом ядре: Bitrix\Main\Web\HttpClient. И это было очень приятной неожиданностью. Он может и файл скачать и запрос к API отправить и все через сокеты (есть везде, не считаются опасными).
Выглядит работа с ним вот так:
и вот так
Так что всем рекомендую: кроссерверно, безопасно, из коробки.
Сам использую уже во втором модуле - пока полет нормальный.
[spoiler]
Проблем на самом деле 2 (по крайней мере у меня в голове):
- CURL (который все всегда советуют для этого) может быть не подключен как расширение php. Можно доустановить, донастроить - но типичный владелец сайта обычно вообще без понятия о чем это.
- URL fopen (который вторым приходит на ум) считается небезопасным (монитор безопасности рекомендует отключать эту возможность)
И вот тут обычно возникает желание написать свой велосипед. Когда в очередной раз у меня возникло такое желание наткнулся на замечательный класс в новом ядре: Bitrix\Main\Web\HttpClient. И это было очень приятной неожиданностью. Он может и файл скачать и запрос к API отправить и все через сокеты (есть везде, не считаются опасными).
Выглядит работа с ним вот так:
use Bitrix\Main\Web\HttpClient; $httpClient = new HttpClient(); $httpClient->setHeader('Content-Type', 'application/json', true); $response = $httpClient->post('http://www.example.com', json_encode(array('x' => 1))); |
use Bitrix\Main\Web\HttpClient; $httpClient = new HttpClient(); $httpClient->download('http://www.example.com/robots.txt', $_SERVER['DOCUMENT_ROOT'].'/upload/my.txt'); |
Сам использую уже во втором модуле - пока полет нормальный.