Drupal 8 Feeds charset windows-1251 и header User-Agent

Аватар пользователя Grenuy Grenuy 25 октября в 21:12

Есть прекрассный модуль
https://www.drupal.org/project/feeds
который решает 90% все вопросов с импортом быстро и просто, немного наловчившись все стает супер хорошо.
Но не писал бы сюда если бы было все так хорошо.
Задача, есть ссылка с которой можно получить csv файл, кодировка windows-1251, что бы получить ссылку обязательно должен быть header User-Agent.

И так есть 3 проблемы одну решил.
1. Получить файл csv по ссылке, когда должен быть указан User-Agent(решил костылем
feeds/src/Feeds/Fetcher/HttpFetcher.php
Вставил в функцию get

diff --git a/src/Feeds/Fetcher/HttpFetcher.php b/src/Feeds/Fetcher/HttpFetcher.php
index 6c57a1a4..0bd10537 100644
--- a/src/Feeds/Fetcher/HttpFetcher.php
+++ b/src/Feeds/Fetcher/HttpFetcher.php
@@ -141,6 +141,10 @@ class HttpFetcher extends PluginBase implements ClearableInterface, FetcherInter
 
     $options = [RequestOptions::SINK => $sink];
 
+    if (is_array($this->client->getConfig('headers'))) {
+      $options[RequestOptions::HEADERS]['User-Agent'] = $options[RequestOptions::HEADERS]['User-Agent'] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36";
+    }
+
     // Add cached headers if requested.
     if ($cache_key && ($cache = $this->cache->get($cache_key))) {
       if (isset($cache->data['etag'])) {

И вот не решеные проблемы
2. Файл отдается в кодировке windows-1251 как автоматично декодировать, или указать кодировку?
3. Загружаемые изображения по урл, так же доступны с заголовком User-Agent, а запрашиваются без этого заголовка, куда добавить заголовок?

Комментарии

Аватар пользователя bsyomov bsyomov 26 октября в 15:42

Всё это надо решать написанием своего fetcher, а не хакать модули...

Как основу, можно взять, например, https://www.drupal.org/project/feeds_httpfetcher_append_headers который решает уже первую проблему.
Также почитать https://www.drupal.org/docs/8/modules/feeds/creating-a-custom-feeds-work...
Вторую решить в своей имплементации фетчера каким-нибудь mb_convert_encoding или любым другим методом на свой вкус.
Третья, возможно, решится после прочтения документации.