Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json InDesign套接字HTTP响应缺少节_Json_Sockets_Asp.net Web Api_Adobe Indesign_Extendscript - Fatal编程技术网

Json InDesign套接字HTTP响应缺少节

Json InDesign套接字HTTP响应缺少节,json,sockets,asp.net-web-api,adobe-indesign,extendscript,Json,Sockets,Asp.net Web Api,Adobe Indesign,Extendscript,我正在自动化AdobeInDesign,使用从带有SQL Server后端的web API收集的JSON数据创建文档。我正在使用Sockets对象对服务器进行HTTP 1.0调用。有时,接收到的响应在JSON字符串中的不同点缺少大约1700个字符,但是当我使用curl或Postman调用相同的API端点时,我得到了一个完整有效的响应 响应应该有150k个字符长,我正在使用conn.read(9999999999)来读取它。此外,字符串结尾的外观看起来是正确的,所以我不认为这是任何类型的截断问题

我正在自动化AdobeInDesign,使用从带有SQL Server后端的web API收集的JSON数据创建文档。我正在使用Sockets对象对服务器进行HTTP 1.0调用。有时,接收到的响应在JSON字符串中的不同点缺少大约1700个字符,但是当我使用curl或Postman调用相同的API端点时,我得到了一个完整有效的响应

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

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

这是我看到的行为的一个例子,使用虚假数据

“预期”响应

[{“Id”:1,“name”:“Random name”,“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;
   }
}

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


在我的例子中,解决方案是使用Kris Coppieter提供的GetURL方法。

您需要发布套接字代码。很可能您只是错误地处理了NetworkStream/socket句柄。典型的错误是假设一个Read调用将阻塞,直到它读取了请求的字节数。这就是文件处理和文件流的工作方式。但不是套接字句柄和NeworkStream。谢谢。我已经添加了上面的代码。什么是
Socket
?请标记您正在使用的语言。代码是JavaScript/Adobe ExtendScript。Socket是Adobe在ExtendScript环境中提供的类型。