cpprestsdk http_listener игнорирует все после # - PullRequest
0 голосов
/ 17 июня 2019

РЕДАКТИРОВАТЬ: см. Мой пост ниже для ответа, как это исправить.

Я создаю клиентское приложение, которое будет хранить некоторые данные в папке приложения пользователя Dropbox.Поэтому в настоящее время я использую неявное предоставление, которое будет перенаправлять пользователя на указанный URI перенаправления с параметрами, переданными после # в URL

Пример:

localhost: 1666 / Dropbox # access_token =... & token_type = .......

Создавая прослушиватель http по URL-адресу локального хоста, он обнаруживает запрос, однако все после # игнорируется и не передается как часть запроса.Есть ли способ сделать захват данных после # или есть какая-нибудь другая библиотека, которая позволяет мне это делать?

Я использую cpprestsdk https://github.com/microsoft/cpprestsdk

    web::http::experimental::listener::http_listener* l = new web::http::experimental::listener::http_listener(m_authConfig.redirect_uri());
    l->support([this](web::http::http_request request) -> void
    {
        auto uri = request.request_uri();
        auto requestPath = web::uri::split_path(uri.path());
        auto querryObjects = web::uri::split_query(uri.query());
        auto s = uri.fragment();
        if (request.request_uri().path() == U("/Dropbox")) && request.request_uri().query() != U(""))
        {
            request.reply(web::http::status_codes::OK, U("ok.") + uri.query());
        }
        else
        {
            request.reply(web::http::status_codes::OK, U("error.") + uri.query());
        }
    });
l->open().wait();

Спасибо!

1 Ответ

0 голосов
/ 18 июня 2019

Итак, после небольшого исследования выясняется, что # (фрагменты) не отправляются обратно в большинстве браузеров, поэтому, чтобы получить данные, я возвращаю следующий скрипт java-script:

<script> window.location.replace([location.protocol, '//', location.host, location.pathname, '?', location.hash.substring(1,location.hash.length )].join(''));</script>

Это преобразует часть хеш-функции в строку запроса и перенаправляет ее пользователю, чтобы слушатель обнаружил ее.

...