Node.JS:如何在URL请求中使用百分号?

时间:2018-07-15 08:07:42

标签: node.js api magento request

我正在尝试从Magento2请求一个简单的API搜索,但是显然我不能在URL请求中使用%符号。还有另一种在URL中使用百分号的方法吗?

  • %_%在[value]之后

请求链接:

const request_data = {
    url: 'http://.../rest/V1/products?searchCriteria[filter_groups][0][filters][0]'+
    '[field]=name&searchCriteria[filter_groups][0][filters][0][value]=%Example%'+
    '&searchCriteria[filter_groups][0][filters][0][condition_type]=like',
    method: 'GET',
};

控制台错误:

  

URIError:URI格式错误

at decodeURIComponent (<anonymous>)
at OAuth.deParam (/Users/Kevin/Desktop/TestingModules/node_modules/oauth-1.0a/oauth-1.0a.js:227:27)
at OAuth.deParamUrl (/Users/Kevin/Desktop/TestingModules/node_modules/oauth-1.0a/oauth-1.0a.js:245:17)
at OAuth.getParameterString (/Users/Kevin/Desktop/TestingModules/node_modules/oauth-1.0a/oauth-1.0a.js:142:132)
at OAuth.getBaseString (/Users/Kevin/Desktop/TestingModules/node_modules/oauth-1.0a/oauth-1.0a.js:124:130)
at OAuth.getSignature (/Users/Kevin/Desktop/TestingModules/node_modules/oauth-1.0a/oauth-1.0a.js:100:36)
at OAuth.authorize (/Users/Kevin/Desktop/TestingModules/node_modules/oauth-1.0a/oauth-1.0a.js:87:39)
at Object.module.exports.init (/Users/Kevin/Desktop/TestingModules/test.js:36:43)
at [eval]:1:19
at ContextifyScript.Script.runInThisContext (vm.js:50:33)

1 个答案:

答案 0 :(得分:2)

问题

%字符是url的转义字符,并且是url中对特殊字符进行url编码的第一个字符-它表示已编码字符的开头(由%组成,后跟两个十六进制字符)。收到URIError的原因是,当解析uri时,计算机会看到%,然后查看接下来的两个字符以告诉正在编码的字符。因此,%Ex被误认为是字符的编码(但是x不是十六进制字符,因此您得到了格式错误的URI)。有关更多信息,请参见https://en.wikipedia.org/wiki/Percent-encodinghttps://www.ietf.org/rfc/rfc1738.txt

解决方案

要对百分号进行编码,请将%替换为%25,这是百分号的编码。