javascript - 如何在不获取 %22 引号的情况下将 CURL 请求转换为 AJAX 调用?
问题描述
我有一个运行良好的 CURL 请求:
curl --request GET \
--url http://localhost:3001/api/v1/protected/getmydetails \
--header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2dvbnRvLmNvbSIsImF1ZCI6Im5vZGVqcy1qd3QtYXV0aCIsImV4cCI6MTUzMzc2OTE0MCwic2NvcGUiOiJmdWxsX2FjY2VzcyIsInN1YiI6ImxhbGFsYW5kfGdvbnRvIiwianRpIjoiQktBZW9KUVNBY3dBZ1A0dyIsImFsZyI6IkhTMjU2IiwiaWF0IjoxNTMzNzQ0MzQwfQ.xM6n2NNEoyY234vbNEnHJsp3My9BmnYtzd1JHmvIyUU' \
--header 'Content-Type: application/json' \
--data '{
"id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIwIjoidCIsIjEiOiJvIiwiMiI6Im0iLCIzIjoibSIsIjQiOiJ5IiwiNSI6Il8iLCI2IjoiTCIsIjciOiJhIiwiOCI6InciLCJpYXQiOjE1MzM3NDQzNDAsImV4cCI6MTUzNTU0NDM0MH0.WZ47z_xytiyH3LlEYsfvApIfa4H92Tf2sGsGFZ4rRyE"
}'
但是,我很难形成相应的 AJAX 调用。
<script>
var id_tok = Cookies.get('id_token');
var access_tok = Cookies.get('access_token');
var dataLoad = JSON.stringify({
id_token: id_tok
});
$.ajax({
type: 'GET',
url: 'http://localhost:3001/api/v1/protected/getmydetails',
headers: { Authorization: 'Bearer ' + access_tok },
data: dataLoad,
contentType: 'application/json'
}).done(function(data) {
console.log(data);
console.log('data called success');
});
我在 Chrome 中检查具有请求 URL 的网络调用:
http://localhost:3001/api/v1/protected/getmydetails?{%22id_token%22:%22eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIwIjoidCIsIjEiOiJvIiwiMiI6Im0iLCIzIjoibSIsIjQiOiJ5IiwiNSI6Il8iLCI2IjoiTCIsIjciOiJhIiwiOCI6InciLCJpYXQiOjE1MzM3NDQ4ODgsImV4cCI6MTUzNTU0NDg4OH0.ixgm2LHb6iPAbrfQmtwINin_RBeBa5nu29yevbtEi74%22}
Request Method: GET
我很确定将错误缩小到传输id_token
和“”被解析为%22
.
我不明白为什么引号会被翻译成%22
引号而不是引号?
node.js 服务器返回500 (Internal Server Error) which is caused by a QueryResultError: 0
解决方案
正如@kevin628 在评论中所说,%22
是发送"
http请求的正确方法。我几乎可以肯定您的问题在$.ajax的标题中,而不是headers: { Authorization: 'Bearer ' + access_tok }
您应该尝试
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", 'Bearer ' + access_tok);
},
那么代码应该是这样的:
$.ajax({
type: 'GET',
url: 'http://localhost:3001/api/v1/protected/getmydetails',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", 'Bearer ' + access_tok);
},
data: dataLoad,
contentType: 'application/json'
}).done(function(data) {
console.log(data);
console.log('data called success');
});
推荐阅读
- maven - “Jenkins + Selenium Grid + Maven”错误:org.openqa.selenium.SessionNotCreatedException:
- asp.net-core-mvc - 如何将 ViewModel 传递到 .NET Core 3.1 中的 Razor 组件
- mysql - Left 和 Right Join 给出相同的输出
- javascript - 我如何在我的 mac 中处理这个文件上传错误?
- c# - 单击浏览器的后退按钮时如何保留搜索结果 - ASP.NET Core MVC
- r - 如何更改栅格坐标?
- python - 如何使用 Numpy 在 Python 中加速 OpenCV 图像的循环?
- javascript - 浏览器后退按钮未正确执行
- c++ - constexpr 如果测试一个模板参数
- mqtt - 如何在 mqtt 代理的发布者客户端中通知订阅失败