如何发送带有自定义标题的表单

时间:2019-01-31 12:02:23

标签: jquery ruby-on-rails forms

我有一个GET api端点来下载CSV文件:

GET /api/v1/reports/report.csv

  • 它具有两个参数:start_dateend_date
  • 它将检查请求标头中的api-key

因此,我可以使用邮递员通过标头中的api键发送GET请求以下载文件。


现在网站上有一个表格。用户可以输入start_dateend_date,然后按Download(提交)按钮。

我的问题是,如何在请求的标题中插入api-key

1 个答案:

答案 0 :(得分:0)

最好的方法是使您的API更适合浏览器,并在get-parameter或cookie中传递api-key。

其他选项是通过ajax下载文件(这不会显示下载进度等),将需要隐藏的锚元素:

<a id="stubAnchor" style="display: none"></a>

和js:

var req = new XMLHttpRequest();
req.open("GET", "/api/v1/reports/report.csv", true);
req.responseType = "blob";
req.setRequestHeader('Api-key', 'some_key')

req.onload = function (event) {
  var blob = req.response;
  var fileName = "report.csv";
  var contentType = req.getResponseHeader("content-type");

  if (window.navigator.msSaveOrOpenBlob) {
    // IE
    window.navigator.msSaveOrOpenBlob(new Blob([blob], {type: contentType}), fileName);
  } else {
    var el = document.getElementById("stubAnchor");
    el.href = window.URL.createObjectURL(blob);
    el.download = fileName;
    el.click();
  }
};
req.send();