我正在尝试请求一个有点错误的API,要求某些字符进行URL编码(在我的情况下,点。导致问题)
GET /projects/:projectid/merge_requests
project_id 是groupname/project.name
API需要urlencoded(包括点),否则它确实以404响应
正确的网址是/projects/groupname%2Fproject%2Ename/merge_requests
我目前正在手动进行替换,但似乎浏览器认为我不知道我在做什么用替换%2E 。在实际中请求。所以我无法查询我的API
目前的代码如下:
var projectid = 'foo/bar.baz';
projectid = encodeURIComponent(projectid).replace(/[.]/g, '%2E');
var url = 'http://gitlab.local/api/v3/projects/' + projectid + '/merge_requests'
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = 'json';
xhr.addEventListener('load', mycallback);
xhr.send();
// -> GET http://gitlab.local/api/v3/projects/foo%2Fbar.baz/merge_requests 404 ()
有没有办法强制URL按字面意思发送而不是由浏览器转换?
(我在Chrome和Firefox中有相同的行为)
答案 0 :(得分:0)
而不是%2E
,请将其替换为%252E
。 %2E
是.
的转义码,因此会将其解释为句点。你需要的是逃避%
,这就是%25
所做的。未转义时,%252E
变为%2E
。