首页 > 解决方案 > 如何在不获取 %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

标签: javascriptnode.jsajaxcurl

解决方案


正如@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');
 });

推荐阅读