cpprestsdk http_listener 忽略# 之后的所有内容
cpprestsdk http_listener ignoring everything after #
编辑:请参阅下面我的 post 以了解如何解决此问题。
我正在构建一个客户端应用程序,它将在用户保管箱应用程序文件夹中存储一些数据。所以目前我正在使用隐式授权,它将用户重定向到给定的重定向 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 queryObjects = 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();
谢谢!
所以经过一番研究后发现,#(片段)在大多数浏览器中不会被发回,所以为了能够获取数据,我 return 以下 java-script 脚本:
<script> window.location.replace([location.protocol, '//', location.host, location.pathname, '?', location.hash.substring(1,location.hash.length )].join(''));</script>
这会将哈希部分转换为查询字符串并将其重定向到用户,以便侦听器检测到它。
编辑:请参阅下面我的 post 以了解如何解决此问题。
我正在构建一个客户端应用程序,它将在用户保管箱应用程序文件夹中存储一些数据。所以目前我正在使用隐式授权,它将用户重定向到给定的重定向 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 queryObjects = 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();
谢谢!
所以经过一番研究后发现,#(片段)在大多数浏览器中不会被发回,所以为了能够获取数据,我 return 以下 java-script 脚本:
<script> window.location.replace([location.protocol, '//', location.host, location.pathname, '?', location.hash.substring(1,location.hash.length )].join(''));</script>
这会将哈希部分转换为查询字符串并将其重定向到用户,以便侦听器检测到它。