You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在URLFetchApp中正确转义含双引号的请求负载?

解决Google Apps Script中URLFetchApp发送带双引号负载的问题

问题核心

你遇到的问题是:手动用JSON.stringify()处理含双引号的XML内容后,传入URLFetchApp会触发双重转义,导致CMS返回422错误;直接传未序列化的对象又因格式不符返回400错误。本质是URLFetchApp的请求配置与序列化逻辑不匹配。

正确实现方案

核心是跳过手动JSON.stringify(),直接传入JavaScript对象,并强制设置请求的contentType为application/json。URLFetchApp会自动完成正确的JSON序列化,避免双重转义问题。

示例代码:

// 假设finalContent是包含双引号的XML字符串
var finalContent = '<?xml version="1.0"?><section xmlns="http://docbook.org/ns/docbook" xmlns:xinfo="http://ns.expertinfo.se/cms/xmlns/1.0" xml:id="12345" version="5.0" xml:lang="en" xinfo:resource="12345" xinfo:resource-id="1234" xinfo:resource-type="component" xinfo:resource-title="Source 5" xinfo:resource-titlelabel="" xinfo:version-major="1" xinfo:version-minor="0">  <title xinfo:text="1234">Name</title>  <para>Short overview</para></section>';

var data = {
  "content": finalContent
};

var options = {
  method: "post",
  contentType: "application/json", // 必须配置该参数
  payload: data, // 直接传入对象,无需提前序列化
  muteHttpExceptions: true // 可选,便于查看完整错误响应
};

var response = URLFetchApp.fetch("你的CMS API地址", options);
Logger.log(response.getContentText());

错误原因解析

  • 手动执行JSON.stringify(data)后传payload,若未设置contentType,URLFetchApp会默认将内容当作表单数据处理,对已序列化的字符串再次编码,造成双重转义。
  • 直接传对象但未设置contentType,URLFetchApp会用application/x-www-form-urlencoded格式发送,不符合CMS要求的JSON格式,因此返回400错误。

验证步骤

若仍有问题,可先验证序列化结果是否与Node.js成功发送的内容一致:

var serialized = JSON.stringify(data);
Logger.log(serialized);

确认输出符合CMS要求后,再用上述options配置发送请求。


内容的提问来源于stack exchange,提问作者hcdocs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:59:54