Страница 1 из 1

Yii2 Http Client: указать формат парсинга ответа принудительно

Добавлено: 2019.06.03, 23:18
lgXenos
Доброго
На офф. сайте сказано, что клиент сам разбирается и форматирует. Но это не работает, когда с обратной стороны сидит какой-то древний сервер, что отвечает в виде

Код: Выделить всё

Content-Type: text/html

<?xml version="1.0" encoding="utf-8"?>
<files>
  <result>
  ...............
Я попытался при создании клиента дописать:

Код: Выделить всё

->setFormat(Client::FORMAT_XML)
->setHeaders([
	'Accept' => 'application/xml, text/xml',
])
->send();
Но как-то это не избавило меня от ошибки:
Unable to detect format for content parsing. Raw response:
Можно как-то по-простому указать клиенту, что не важно, какой там заголовок. Просто берем и парсим как XML ?
Или обязательно делать "свой" парсер, который наследовать от XML-парсера и натравливать на mime-type text/html?

https://github.com/yiisoft/yii2-httpcli ... 1%8B%D1%85

PS:
такой вариант также не сработал

Код: Выделить всё

$response = (new Client([
			'parsers' => [
				'html' => 'yii\httpclient\XmlFormatter',
				'text' => 'yii\httpclient\XmlFormatter',
				'text/html' => 'yii\httpclient\XmlFormatter',
			],
		]))->createRequest()
		
как и вариант

Код: Выделить всё

$response = (new Client([
			'formatters' => [
				'html' => 'yii\httpclient\XmlFormatter',
				'text' => 'yii\httpclient\XmlFormatter',
				'text/html' => 'yii\httpclient\XmlFormatter',
			],
		]))->createRequest()
		

Re: Yii2 Http Client: указать формат парсинга ответа принудительно

Добавлено: 2019.06.04, 08:24
SiZE
Вы парсеру форматировщик указали http://prntscr.com/nxaxdf

Код: Выделить всё

use yii\httpclient\Client;

$client = new Client([
    'parsers' => [
        'text/html' => [
            'class' => 'yii\httpclient\XmlParser',
        ]
    ],
]);

Re: Yii2 Http Client: указать формат парсинга ответа принудительно

Добавлено: 2019.06.04, 13:04
lgXenos
SiZE писал(а):
2019.06.04, 08:24
Вы парсеру форматировщик указали
Спасибо) Следствие программирования когда уже спать пора..

С работы, кстати, почему-то не распознает что это тип text или еще что-то:

Код: Выделить всё

Exception 'yii\base\InvalidParamException' with message 'Unrecognized format '''
Т.е. пришлось индекс парсера привести к пустым кавычкам. очень странно...

Re: Yii2 Http Client: указать формат парсинга ответа принудительно

Добавлено: 2019.06.10, 22:21
lgXenos
Как я понял - правильный ответ должен выглядеть похожим на

Код: Выделить всё

$client = new Client([
    'responseConfig' => ['format' => Client::FORMAT_XML],
    ..............
А "костыль" из прошлого ответа уперся в то, что он формат распарсил в null. А на null - там стоит Exception
\vendor\yiisoft\yii2-httpclient\src\Response.php:200

Код: Выделить всё

    private function getParser()
    {
        $format = $this->getFormat();
        if ($format === null) {
            throw new Exception("Unable to detect format for content parsing. Raw response:\n\n" . $this->toString());
        }
        return $this->client->getParser($format);
    }