首页 > 解决方案 > 带有对象数组的 HTTPS 发布 URL

问题描述

我一直在尝试使用数组中的对象格式化 URL POST,因为它们需要发布到我的 REST API。我被迫使用来自供应商的古老 API POST 系统,并且一直在尝试破解解决方案。

基本上 JSON 看起来类似于:

{"api_key": "12234", 
"server_id:"qwp2222",
"recipients": [
{"email":"john@doe.com", 
"name": "john doe"}]
}

我正在尝试将 Array'd 键值对格式化为 URL 的一部分,以便它不会大张旗鼓地发布到端点。我将 URL 的其余部分放在一起没有问题,只是收件人的数组才是问题所在。

我应该如何编写 POST URL 以确保我可以正确发布对象数组?

我提前感谢所有帮助!

标签: arraysjsonobjectposthttps

解决方案


在这里不起作用,但此代码将从您的 JSON 中创建线性结构,创建表单并提交给自身。

如果您在本地或其他任何地方运行它并添加 f.action = 'your get or post page',它将正确发送数据。

var data = {
  api_key: '12234',
  server_id: 'qwp2222',
  recipients: [{
    email: 'john@doe.com',
    name: 'john doe'
  }]
};

function collectItems(res, json) {
  for (var a in json) {
    if (json[a].constructor === Array ||
      json[a].constructor === Object) {
      collectItems(res, json[a]);
    } else {
      res.push([a, json[a]]);
    }
  }
}
var all = [];
collectItems(all, data);
var f = document.createElement('FORM');
f.method = 'post';
// default get: ...?api_key=12234&server_id=qwp2222&email=john@doe.com&name=john+doe
for (var e in all) {
  var i = document.createElement('INPUT');
  i.name = all[e][0];
  i.value = all[e][1];
  i.type = 'hidden'; // do not show values sent
  f.appendChild(i);
}
if (location.search) {
  alert("Submit result:" & location.href);
} else {
  document.body.appendChild(f);
  f.submit();
}


推荐阅读