【发布时间】:2016-10-04 18:39:04
【问题描述】:
我正在尝试请求一个有点错误的 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 中的行为相同)
【问题讨论】: