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

httpclient как отключить экранирование?

Добавлено: 2021.04.19, 17:22
Diakon
Добрый день!
Я использую yii\httpclient\Client
но при отправке он экранирует запрос
Т.е. вместо того что бы при курл запросе данные уходили как https://api.site.ru/vapi/6.0?q=payurl&e ... ssUrl=http://...
уходят как https://api.site.ru/vapi/6.0?q=payurl&a ... =http%3A%2
Скажите, как сделать что бы не экранировались параметры в data?
Мой код

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

use yii\httpclient\Client;
....
    
        $client = new Client();
        return $client->createRequest()
            ->setFormat(Client::FORMAT_CURL)
            ->setMethod('get')
            ->setUrl('https://api.site.ru/vapi/6.0')
            ->addHeaders(['Authorization' => $token])
            ->setData(['q'=>'payurl', 'eId'=>111, 'successUrl'=>'http://success.ru/url'])
            ->send();

Пожалуйста, кто сталкивался с таким, скажите как убрать экранирование в setData, что бы ссылка сама по себе имела нормальный вид (т.е. вместо &, например, был символ &)? Спасибо!

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 17:58
rak
и как в таком случае отличить параметры в основном url от параметров во вложенном url?
и вообще, там точно должен быть get, а не post?

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 18:15
Diakon
rak писал(а): 2021.04.19, 17:58 и как в таком случае отличить параметры в основном url от параметров во вложенном url?
и вообще, там точно должен быть get, а не post?
Да, как ни странно АПИ одной из страховых компаний РФ требует передавать без экранирования и как GET строку

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 18:25
rak
хм, ну ок, но как это должно работать?
Если делать get запрос на url

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

https://api.site.ru/vapi/6.0?q=payurl&successUrl=http://success.ru/?a=b&c=d
при разборе url получим

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

q=payurl
successUrl=http://success.ru/?a=b
c=d

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 18:35
Diakon
rak писал(а): 2021.04.19, 18:25 хм, ну ок, но как это должно работать?
Если делать get запрос на url

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

https://api.site.ru/vapi/6.0?q=payurl&successUrl=http://success.ru/?a=b&c=d
при разборе url получим

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

q=payurl
successUrl=http://success.ru/?a=b
c=d
Да, нужно экранировать только значение, без ключей

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 18:40
rak
Diakon писал(а): 2021.04.19, 18:35
rak писал(а): 2021.04.19, 18:25 хм, ну ок, но как это должно работать?
Если делать get запрос на url

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

https://api.site.ru/vapi/6.0?q=payurl&successUrl=http://success.ru/?a=b&c=d
при разборе url получим

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

q=payurl
successUrl=http://success.ru/?a=b
c=d
Да, нужно экранировать только значение, без ключей
так значения же и экранируются, ведь ключ в данном случае successUrl, а значение - закодированный урл

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 18:52
Diakon
rak писал(а): 2021.04.19, 18:40
Diakon писал(а): 2021.04.19, 18:35
rak писал(а): 2021.04.19, 18:25 хм, ну ок, но как это должно работать?
Если делать get запрос на url

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

https://api.site.ru/vapi/6.0?q=payurl&successUrl=http://success.ru/?a=b&c=d
при разборе url получим

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

q=payurl
successUrl=http://success.ru/?a=b
c=d
Да, нужно экранировать только значение, без ключей
так значения же и экранируются, ведь ключ в данном случае successUrl, а значение - закодированный урл
Экранируется весь url
Т.е. имеет вид

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

api.site.ru/vapi/6.0?q=payurl&eId=111&successUrl=http%3A%252
а надо что бы был

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

api.site.ru/vapi/6.0?q=payurl&eId=111&successUrl=http://success....

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 18:55
rak
парсер режет ссылки, попробуйте в редакторе в тег code обернуть, иначе ничего не понятно :?

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.19, 19:14
rak
попробовал ваш пример и получил url(вместо site.ru использовал домен google.com)

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

https://google.com/vapi/6.0?q=payurl&eId=111&successUrl=http%3A%2F%2Fsuccess.ru%2Furl

Re: httpclient как отключить экранирование?

Добавлено: 2021.04.21, 06:39
nikudator
Я бы копал в эту сторону:
https://www.yiiframework.com/extension/ ... soderzimym