InDesign 套接字 HTTP 响应缺少部分

InDesign Socket HTTP response is missing sections

我正在使 Adob​​e InDesign 自动化,以使用从具有 SQL 服务器后端的 Web API 收集的 JSON 数据创建文档。我正在使用 Sockets 对象对我们的服务器进行 HTTP 1.0 调用。有时收到的响应从 JSON 字符串中的各个点丢失了大约 1700 个字符,但是当我使用 curl 或 Postman 调用相同的 API 端点时,我得到了完整且有效的响应。

回复应该有 150k 个字符长,我正在使用 conn.read(99999999) 来阅读它。此外,字符串末尾的外观看起来是正确的,所以我不认为这是任何类型的截断问题。

问题似乎只在我请求 UTF-8 编码时出现。如果我请求 ASCII,我会得到一个完整且有效的响应,但缺少各种 Unicode 字符。如果我请求 BINARY,我会得到一个完整且有效的响应,但 JavaScript/ExtendScript 似乎正在处理作为单个字节接收的任何多字节 Unicode 字符,而不是我们想要显示的 Unicode 字符。

这是我所看到的使用虚假数据的行为说明...

"Expected" 回复...

[{"Id":1, "name":"Random Name", "Text":"A bunch of text", "AnotherId": 1}]

"Actual" 回复...

[{"Id":1, "name":"Random Name", "Text":"A bunc": 1}]

问题首先表现为 JSON2 解析错误,原因很明显,但问题的根源似乎是部分数据在传输过程中丢失。

到目前为止,我们只在使用 InDesign 套接字对象进行调用时看到了这个问题,并不是每个响应都表现出这种行为。

如果您能提供任何帮助或见解,我们将不胜感激。

这是我用来调用数据的函数...

function httpRequest(url, encoding) {
   try {
      var response = "";

      var hostName = getHostFromUrl(url);
      var pathAndQuery = getPathAndQueryFromUrl(url);

      var httpGet = "GET ";
         httpGet += pathAndQuery;
         httpGet += " HTTP/1.0\r\nHost: ";
         httpGet += hostName;
         httpGet += "\r\n";

      var conn = new Socket;

      conn.timeout = 30;
     //conn.encoding = encoding || "UTF-8";
     //conn.charset = "UTF-16";

      if (conn.open(hostName + ":80", encoding || "UTF-8")) {
         // send a HTTP GET request
         conn.writeln(httpGet);

         // and read the server's response
         response = conn.read(99999999);

         conn.close();
      }

      return parseHttpResponse(response);
   }
   catch (e) {
      $.writeln(e);
      $.global.alert("There was a problem making an HTTP Request: " + e);
      return null;
   }
}

原来我对 HTTP 响应的处理过于简单,需要额外的逻辑才能正确处理 Unicode 字符。

就我而言,解决方案是使用 Kris Coppieter here 提供的 GetURL 方法。