Json InDesign套接字HTTP响应缺少节
我正在自动化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字符 这是我看到的行为的一个例子,使用虚假数据 “预期”响应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)来读取它。此外,字符串结尾的外观看起来是正确的,所以我不认为这是任何类型的截断问题
[{“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环境中提供的类型。