Как получить параметры запроса в запросе сервера во флаттере? - PullRequest
0 голосов
/ 16 октября 2019

Для проверки подлинности с помощью Imgur в мобильном приложении я решил создать http-сервер на порту 8585, чтобы завершить поток oauth. Запрос прочитан, а ответ написан, но я не могу получить доступ к параметрам запроса из URL.

Я уже пытался использовать uri.queryparameters ["access_token"], но возвращается ноль.

сервер создается следующим образом:

Future<Stream<String>> _server() async {
  final StreamController<String> onCode = new StreamController();
  HttpServer server =
  await HttpServer.bind(InternetAddress.loopbackIPv4, 8585);
  server.listen((HttpRequest request) async {
    print(request.uri.hashCode);
    final String accessToken = request.uri.queryParameters["access_token"];


    request.response
      ..statusCode = 200
      ..headers.set("Content-Type", ContentType.html.mimeType)
      ..write("<html><h1>You can now close this window</h1></html>");
    await request.response.close();
    await server.close(force: true);
    onCode.add(accessToken);
    await onCode.close();
  });
  return onCode.stream;
}

URL-адрес, который получает сервер, имеет вид: http://localhost:8585/callback#access_token=your_token_here&expires_in=315360000&token_type=bearer&refresh_token=_your_refresh_token_here

Кто-нибудь может мне помочь? Я застрял на этом целых два дня!

1 Ответ

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

Возвращает ноль, потому что параметры запроса начинаются с ? в начале, но в этой ссылке есть # перед параметрами запроса, и замена его на ? действительно решает проблему.

решение 1:

 var uri =Uri.parse('http://localhost:8585/callback#access_token=your_token_here&expires_in=315360000&token_type=bearer&refresh_token=_your_refresh_token_here');
 var newUri = Uri(query: uri.toString().substring(uri.toString().indexOf('#')+1));
 print(newUri.queryParameters['access_token']) // your_token_here;

решение 2:

  var uri =Uri.parse('http://localhost:8585/callback#access_token=your_token_here&expires_in=315360000&token_type=bearer&refresh_token=_your_refresh_token_here');
  var newUri = Uri.parse(uri.toString().replaceFirst('#', '?'));
  print(newUri.queryParameters['access_token']) // your_token_here;
...