【问题标题】:HTTP request with XML payload using UrlFetchApp使用 UrlFetchApp 的带有 XML 有效负载的 HTTP 请求
【发布时间】:2020-06-03 20:33:19
【问题描述】:

有没有办法使用 Google Apps 脚本URLFetchApp 提交 XML 负载?

我已经尝试将 XML 文档添加到有效负载中

var url = "https://stackoverflow.com"; //not real
var xml = ///some xml

var params = {'content-type': 'application/xml',
              'method': 'post',
              'payload': xml};

var response = UrlFetchApp.fetch(url, params);

我希望提交请求,但它在“获取”时出错。

我收到的错误是:

“提供无效值的属性:有效负载(第 73 行,文件“代码”)”。

【问题讨论】:

  • Cesar,您能否向我们提供一些有关您尝试将 XML 有效负载发送到哪个 API 的信息以及 xml 的 smaple 值是多少 - 它是 xml 字符串还是已解析的文档?谢谢!

标签: google-apps-script urlfetch


【解决方案1】:

问题

您将无效的第二个参数传递给 fetch() 方法调用。

解决方案

您可以在配置对象中传递一组封闭的可接受参数。请确保参数的名称​​与参考文献中的名称完全相同(见下文)。在您的情况下,content-type 应重命名为 contentType(目前,您的请求将您的 XML 文档发送为 application/x-www-form-urlencoded)。

考虑将muteHttpExceptions 设置为true 以简化将来的调试过程。

更新

经过更彻底的调查,您遇到的错误很可能与将 已解析 XML 文档(例如通过 XmlService 创建)传递给payload 如果您正在这样做(在这种情况下会始终如一地重现错误)。请注意payload 可以接受String 或byte[] 或Blob 实例或Object(因contentType 参数而异)。

修改

根据 Tanaike 的评论和建议,如果您确实尝试将 Document 实例传递给 payload,则将通过准备 XML 来修正问题(请注意,这些操作不会改变 xml 值),例如:

  1. XmlService.getPrettyFormat().format(XmlService.parse(xml));
  2. XmlService.getRawFormat().format(xml)(如果 XML 已经解析);

有用的链接

  1. fetch()方法reference;
  2. XmlService类reference;
  3. getRawFormat() 方法reference(以防万一);

【讨论】:

  • 谢谢@Tanaike!我很确定这是问题的根本原因,让我们看看是否有帮助
  • 顺便说一句,@Tanaike,我的立场是正确的-问题是由无效的有效负载类型引起的(很可能是通过尝试将已解析的 Document 实例传递给它-测试结果正是该错误和无效参数content-type 然后将其作为表单编码字符串发送)
  • 感谢您添加信息。从您的附加信息中,例如,添加'payload': XmlService.getPrettyFormat().format(XmlService.parse(xml)) 作为修改点怎么样?此外,如果它能够了解 API 的规范和一个示例 XML 值,它或许能够提出更多的修改点。
  • @Tanaike,同意(并感谢您的建议,将您和我的版本添加到答案中)-API 信息和 XML 值取决于问题的作者
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多