很简单但很难将POST请求从使用URL参数转换为请求正文

时间:2017-05-08 20:12:15

标签: javascript xml api post zendesk

我正在使用以下方式发出POST请求,使用URL params(有效):

var PAYLOAD = `
  <myxmlcontent>
    <attribute name="id">1</attribute>
    <attribute name="FullName">Joe Bloggs</attribute>
  </myxmlcontent>
`

var URL = 'http://www.somewhere.com/integration?apiKey=company&apiToken=123&payload=' + PAYLOAD;

client.request({
  url: URL,
  type: 'POST',
  contentType: 'application/xml'
}).then(
  function(data) {
    console.log(data);
  }
);

但我希望将有效载荷数据放入请求体中。

这是正确的方法吗?我不确定,但到目前为止我的尝试都没有成功:

var PAYLOAD = `
  <myxmlcontent>
    <attribute name="id">1</attribute>
    <attribute name="FullName">Joe Bloggs</attribute>
  </myxmlcontent>
`

client.request({
  url: 'http://www.somewhere.com/integration',
  type: 'POST',
  contentType: 'application/xml',
  headers: {
    apiKey: 'company',
    apiToken: '123'
  },
  dataType: 'xml',
  data: 'data=' + JSON.stringify(PAYLOAD)
}).then(
  function(data) {
    console.log(data);
  }
);

我目前正在构建一个客户端Zendesk应用程序。

2 个答案:

答案 0 :(得分:1)

首先,您必须确保端点通过POST接受数据,否则即使您正确地发送数据也会失败,其次,如果您想以数据编码形式发送数据,则需要更改{ {1}}到contentType并将正文作为网址编码字符串或使用application/x-www-form-urlencoded对象(如果您的框架中可用)发送,例如:

&#13;
&#13;
FormData
&#13;
&#13;
&#13;

不要忘记编码有效载荷的内容。如果您的端点只接受xml编码的字符串,那么您必须按原样发送字符串,只需确保指定正确的var myData = new FormData(); myData.append("payload", encodeURI(PAYLOAD)); client.request({ url: 'http://www.somewhere.com/integration', type: 'POST', contentType: 'application/x-www-form-urlencoded', headers: { apiKey: 'company', apiToken: '123' }, dataType: 'xml', data: myData }).then( function(data) { console.log(data); } );,在这种情况下contentType或{ {1}}。

答案 1 :(得分:0)

解决。这就是我必须做的(谢谢):

var PAYLOAD = `
  <myxmlcontent>
    <attribute name="id">1</attribute>
    <attribute name="FullName">Joe Bloggs</attribute>
  </myxmlcontent>
`

var URL = 'http://www.somewhere.com/integration';

client.request({
  url: URL,
  type: 'POST',
  contentType: 'application/x-www-form-urlencoded',
  dataType: 'xml',
  data: {
    apiKey: 'company',
    apiToken: '123',
    payload: PAYLOAD
  }
}).then(
  function(data) {
    console.log(data);
  }
);

有用的文章:How are parameters sent in an HTTP POST request?