【问题标题】:Add XML Parameters in API request在 API 请求中添加 XML 参数
【发布时间】:2018-10-17 15:21:50
【问题描述】:

使用 SoapUI,在更正参数之前出现错误(我现在得到了所需的响应)。使用 Apps 脚本时,我遇到了同样的错误,但我似乎无法正确添加 XML 参数,下面的示例是我尝试的最后一种方法。

根据 API 文档:

"Wrap the following XML structure in a variable called 'callmeasurement_xml_input' "
<?xml version="1.0" encoding="UTF-8"?>
<callmeasurement username="abc" password="123" api="1"/>

SoapUI 中起作用的“参数”是:

?callmeasurement_xml_input=<?xml version="1.0" encoding="utf-16"?><callmeasurement username="abc" password="123" api="1111"/>

这是我当前的(不工作的)AppsScript:

function apiRequest(){

  var url = 'http://api.callmeasurement.com/api/dnis_list.cfm';

  var rawXML = '<callmeasurement_xml_input>'
  + '<?xml version="1.0" encoding="utf-16"?>'
  + '<callmeasurement username="abc" password="123" api="1111"/>'
  + '</callmeasurement_xml_input>';

  var options = {
    'contentType': 'application/xml',
    'method': 'POST',
    'payload': rawXML
  };
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
  // Returns an error
}

【问题讨论】:

  • 您分配给 rawXML 的文本看起来无效。
  • 错误是什么?
  • 该错误是来自居屋的一般响应。在我正确添加参数之前,这与我在 SoapUI 中收到的响应完全相同。 &lt;h2&gt;An unexpected error occurred.&lt;/h2&gt; &lt;p&gt;Please provide the following information to technical support:&lt;/p&gt; &lt;p&gt;Error Event: &lt;/p&gt; &lt;p&gt;Error details:&lt;br&gt;
  • 在 SoapUI 中,有一个按钮可以添加带有名称的参数。我将名称设置为“callmeasurement_xml_input”,将参数设置为:“ " 解决了问题并提供了正确的响应(仅限 SoapUI)。我觉得“将以下 XML 结构包装在一个名为 'callmeasurement_xml_input” 的变量中是问题所在。我不确定如何在 Apps 脚本中执行此操作。
  • var rawXML ={ 'callmeasurement_xml_input': '&lt;?xml version="1.0" encoding="utf-16"?&gt;' + '&lt;callmeasurement username="abc" password="123" api="1111"/&gt;' };

标签: xml api soap google-apps-script


【解决方案1】:

不应将 XML 包装在 callmeasurement_xml_input 元素中并将其发布到有效负载中,而应对 XML 进行编码并在 callmeasurement_xml_input 查询参数中传递。

function apiRequest(){

  var rawXML = '<?xml version="1.0" encoding="utf-16"?>'
  + '<callmeasurement username="abc" password="123" api="1111"/>';

  var url = 'http://api.callmeasurement.com/api/dnis_list.cfm'
  + '?callmeasurement_xml_input=' + encodeURIComponent(rawXML);

  var options = {'method': 'POST'};
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 2019-09-24
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多