Как кодировать URL в Dart? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь перенести некоторый код из Python в Dart (для приложения Flutter). Однако у меня возникли некоторые проблемы с кодированием URL. Я пытаюсь сделать эквивалент parsedData = urllib.parse.quote(STR_DATA). Самое близкое, что я получил, - с классом Uri Dart:

parsedData = Uri(queryParameters: STR_DATA);
parsedData = Uri.encodeComponent(parsedData.toString());

Это близко к тому, что я пытаюсь получить, но не совсем. Результат, который я получаю с помощью Python, выглядит примерно так (примечание: это кодировка только после периода):

ig_sig_key_version=4&signed_body=efbcf4ac8577da5eb43f33f369cda4248dba52a407e88a565038b53933737bba.%7B%22phone_id%22%3A%20%22ee79227a-cf89-41c8-9598-d0c6f3931fa4%22%2C%20%22_csrftoken%22%3A%20%22BB1PRXVV1y6FgU0Rfmcda3jJG5eVFSPd%22%2C%20%22username%22%3A%20%22USERNAME%22%2C%20%22guid%22%3A%20%22c668814c-a1e9-487c-97f0-8491b2c07c1c%22%2C%20%22device_id%22%3A%20%22android-7eb57ab90e1e2c3e%22%2C%20%22password%22%3A%20%22PASSWORD%22%2C%20%22login_attempt_count%22%3A%20%220%22%7D

В то время как с Dart я получаю что-то вроде этого:

ig_sig_key_version=4&signed_body=d1c26c132b536b3f4ffdd7f5c0524503e48216fb7f638b5f4cab65d74a9834de.%3Fphone_id%3D112626ab-1946-4ad0-bc63-b233f57033f9%26_csrftoken%3DhiPh0jSvjd0eP2dP4VUr83t3htYF7xci%26username%3DUSERNAME%26guid%3D999d2242-f52a-4044-96d9-2245c6757fbc%26device_id%3Dandroid-5daff5c3029f414c%26password%3DPASSWORD%26login_attempt_count%3D0

Кстати, причина, по которой мне нужно это кодировать таким же образом, заключается в том, что в противном случае мой HTTP-запрос возвращает 400. В любом случае, любая помощь приветствуется; заранее благодарю.

ДРУГАЯ СТОРОНА ПРИМЕЧАНИЕ: Я думаю, что именно это и является причиной того, что мой запрос был отклонен, но я не знаю, я не делал много веб-материалов. Если вы думаете, что это может быть что-то еще, не стесняйтесь поправлять меня.

Ответы [ 2 ]

1 голос
/ 08 января 2020

Ты слишком много делаешь. В этом случае вам нужно всего лишь : parsedData = Uri.encodeComponent(STR_DATA);, чтобы получить тот же результат, что и код Python.

1 голос
/ 08 января 2020

Используйте Dart Uri Class

var uri = 'http://example.com/path/to/page?name=ferret john';
var encoded = Uri.encodeFull(uri);
assert(encoded == 'http://example.com/path/to/page?name=ferret%20john');

var decoded = Uri.decodeFull(encoded);
assert(uri == decoded);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...