我正在使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调用。有时...
事实证明,我对HTTP响应的处理过于简单,需要额外的逻辑才能正确处理Unicode字符。