Node.JS: 如何在 URL 请求中使用百分号?
Node.JS: How To Use A Percent Sign In A URL Request?
我正在尝试从 Magento2 请求一个简单的 API 搜索,但显然我不能在 URL 请求中使用 % 符号。还有另一种方法可以使用 URL 中的百分号吗?
- %_%在[值]
之后
请求Link:
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 malformed
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)
问题
%
字符是urls的转义字符,是url的第一个字符——编码urls中的特殊字符——表示urls的开始编码字符(由 %
后跟两个十六进制字符组成)。您收到 URIError 的原因是因为在解析 uri 时,机器会看到 %
然后查看接下来的两个字符以判断正在编码的字符。所以 %Ex
被误认为是字符的编码(但 x 不是十六进制字符,所以你得到一个格式错误的 URI)。有关更多信息,请参阅 https://en.wikipedia.org/wiki/Percent-encoding or https://www.ietf.org/rfc/rfc1738.txt。
解决方案
要对百分号进行编码,请将 %
替换为 %25
,这是百分号的编码。
我正在尝试从 Magento2 请求一个简单的 API 搜索,但显然我不能在 URL 请求中使用 % 符号。还有另一种方法可以使用 URL 中的百分号吗?
- %_%在[值] 之后
请求Link:
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 malformed
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)
问题
%
字符是urls的转义字符,是url的第一个字符——编码urls中的特殊字符——表示urls的开始编码字符(由 %
后跟两个十六进制字符组成)。您收到 URIError 的原因是因为在解析 uri 时,机器会看到 %
然后查看接下来的两个字符以判断正在编码的字符。所以 %Ex
被误认为是字符的编码(但 x 不是十六进制字符,所以你得到一个格式错误的 URI)。有关更多信息,请参阅 https://en.wikipedia.org/wiki/Percent-encoding or https://www.ietf.org/rfc/rfc1738.txt。
解决方案
要对百分号进行编码,请将 %
替换为 %25
,这是百分号的编码。