InDesign Socket HTTP响应缺少部分

问题描述 投票:0回答:1

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

响应应该大约为15万个字符,我正在使用conn.read(99999999)进行读取。另外,字符串末尾的外观看起来正确,因此我认为这不是截断问题。

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

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

“预期”响应...

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

“实际”回复...

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

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

到目前为止,我们仅在使用InDesign Sockets对象进行调用时才看到此问题,并且并非每个响应都表现出此行为。

您提供的任何帮助或见解将不胜感激。

这是我用来调用数据的功能...

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;
   }
}

我正在使Adobe InDesign自动化,以使用从带有SQL Server后端的Web API收集的JSON数据创建文档。我正在使用Sockets对象对我们的服务器进行HTTP 1.0调用。有时...

json sockets asp.net-web-api adobe-indesign extendscript
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.