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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Diakon
Сообщения: 18
Зарегистрирован: 2015.07.02, 18:12

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

Сообщение 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, что бы ссылка сама по себе имела нормальный вид (т.е. вместо &, например, был символ &)? Спасибо!

rak
Сообщения: 2143
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

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

Diakon
Сообщения: 18
Зарегистрирован: 2015.07.02, 18:12

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

Сообщение Diakon »

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

rak
Сообщения: 2143
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение 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

Diakon
Сообщения: 18
Зарегистрирован: 2015.07.02, 18:12

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

Сообщение 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
Да, нужно экранировать только значение, без ключей

rak
Сообщения: 2143
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение 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, а значение - закодированный урл

Diakon
Сообщения: 18
Зарегистрирован: 2015.07.02, 18:12

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

Сообщение 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....
Последний раз редактировалось Diakon 2021.04.19, 19:06, всего редактировалось 3 раза.

rak
Сообщения: 2143
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

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

rak
Сообщения: 2143
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

попробовал ваш пример и получил url(вместо site.ru использовал домен google.com)

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

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

Аватара пользователя
nikudator
Сообщения: 23
Зарегистрирован: 2016.03.08, 19:47

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

Сообщение nikudator »

Я бы копал в эту сторону:
https://www.yiiframework.com/extension/ ... soderzimym
не бойся ночи скрывшей все вокруг, в ней рыщут двое: я, лиса Ахули и пес 3.14здец, таинственный мой друг.

Ответить