HTTP:";错误错误请求行“;

HTTP:";错误错误请求行“;,http,escaping,extendscript,Http,Escaping,Extendscript,我试图通过BridgeTalk从Adobe Illustrator脚本(尽管这个问题与JSX无关)向本地Rails应用程序发出HTTP请求,该应用程序使用套接字连接(如您所见,可能会出现很多错误;) 终于成功地通过了请求,但Rails应用程序抛出了一个错误: ERROR bad Request-Line `GET /test.json HTTP/1.1'. 目前没有发送特殊的头文件-设置非常简单: var connection = new Socket; var response = ''

我试图通过BridgeTalk从Adobe Illustrator脚本(尽管这个问题与JSX无关)向本地Rails应用程序发出HTTP请求,该应用程序使用套接字连接(如您所见,可能会出现很多错误;)

终于成功地通过了请求,但Rails应用程序抛出了一个错误:

ERROR bad Request-Line `GET /test.json HTTP/1.1'.
目前没有发送特殊的头文件-设置非常简单:

var connection = new Socket;
var response   = '';

var host       = '127.0.0.1:3000';
var path       = '/test.json';
var method     = 'GET';

var request    = method + " " + path + " HTTP/1.1";

if (connection.open(host)) {
    connection.write(request);
    response = connection.read(999999);
} else {
    $.writeln('Socket connection failed.');
}
connection.close();
我假设请求是错误的,但我不确定预期的是什么

Rails应用程序在WEBrick上运行

如果您对Rails的期望有任何帮助或提示,我们将不胜感激


更新

WEBrick似乎希望在请求行的末尾返回一个回车:
\r\n

不幸的是,我正在使用BridgeTalk在Bridge中执行一段代码,这要求我对上述函数使用
uneval()
toSource()
。这些似乎逃脱了反斜杠,转换了

GET /test.json HTTP/1.1\r\n
进入

导致相同的错误


有什么想法吗?

我花了一段时间才弄明白,但和往常一样——“运动部件太多,很难发现问题”:

使用编码版本的回车和目的地解码定义请求将有助于:

var request = decodeURI(method + " " + path + " HTTP/1.1%0d%0a");
然而,一个正确的请求应该以
\n\n
而不是
\r\n
结尾,所以要这样做:

var request = decodeURI(method + " " + path + " HTTP/1.1%0a%0a");

现在请求通过了,现在抛出错误的时间更长了。

我为此挂了一段时间,如果您改为以“二进制”打开连接,
connection.open(host,“BINARY”)
,则可以避免URL编码的字符串。从工具指南:
CRLF序列转换为LFs,除非编码设置为二进制。
谢谢!如果有机会,我会试一试的。
var request = decodeURI(method + " " + path + " HTTP/1.1%0a%0a");