flutter: HTTP get request - отключить параметры кодирования - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать демо-приложение с флаттером и пытаюсь получить продукты с демо-сайта magento. Это мой код:

Future<List<Product>> fetchProducts() async {
  final params = <String, String>{
    'searchCriteria[filter_groups][0][filters][0][condition_type]': 'in',
    'searchCriteria[filter_groups][0][filters][0][field]': 'type_id',
    'searchCriteria[pageSize]': '20',
    'searchCriteria[filter_groups][0][filters][0][value]': 'simple,configurable,bundle',
    'searchCriteria[currentPage]': '1',
    'searchCriteria[sortOrders][0][field]': 'created_at',
    'searchCriteria[sortOrders][0][direction]': 'DESC'
  };
  var uri = Uri.parse('https://demo.com/rest/v1/default/products');
  uri = uri.replace(queryParameters: params);
  print(uri);


  final response =
  await http.get(uri, headers: {HttpHeaders.authorizationHeader: "Bearer qb7157owxy8a29ewgogroa6puwoafxxx"});

  if (response.statusCode == 200) {
    // If the call to the server was successful, parse the JSON.
    final data = json.decode(response.body);
    final products = data["items"] as List;
    return products.map<Product>((json) => Product.fromJson(json)).toList();
  } else {
    // If that call was not successful, throw an error.
    throw Exception('Failed to load post');
  }
}

Когда я отлаживал, ответ был 400 - Плохой запрос. Я полагаю, что поскольку кодировщик uri включал процентные символы, как я напечатал, как показано ниже: enter image description here

Так как же отключить кодирование uri? Спасибо, ребята.

1 Ответ

0 голосов
/ 10 октября 2019

Я полагаю, вам следует заменить:

  var uri = Uri.parse('https://demo.com/rest/v1/default/products');
  uri = uri.replace(queryParameters: params);
  print(uri);

на:

  var uri = Uri.https('demo.com', '/rest/v1/default/products', params);

подробнее об этом: Uri.https

подробнее о: replace

пример результата:

enter image description here

независимо от этого, если я попытаюсь с вашими параметрами,Библиотека ведет себя нормально и кодирует специальные символы. ( см. Больше здесь )

, если мы поместим фактический запрос в браузере для проверки ответа:

https://demo.mage-mobile.com/rest/v1/default/products?searchCriteria[filter_groups][0][filters][0][condition_type]=in&searchCriteria[filter_groups][0][filters][0][field]=type_id&searchCriteria[pageSize]=20&searchCriteria[filter_groups][0][filters][0][value]=simple%2Cconfigurable%2Cbundle&searchCriteria[currentPage]=1&searchCriteria[sortOrders][0][field]=created_at&searchCriteria[sortOrders][0][direction]=DESC

мы получим следующий ответ:

enter image description here

И это вызывает у меня первоначальное подозрение: API не поддерживает этот вызов.

Возможно, вам также следует проверить этот тип параметра изВаш код: 'searchCriteria [filter_groups] [0] [filters] [0] [condition_type]' , похоже, вы пытаетесь получить доступ к некоторой информации из коллекции, но на самом деле вы пишете строку ... попробуйтеудаляя кавычки ('bla bla') из идентификатора этих параметров ... также попробуйте поместить запрос прямо в браузер (или почтальон), чтобы он работал.

О кодировке (изменение [ до % 5B ) - это нормально, и это должно произойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...