0

我正在尝试通过 BridgeTalk 使用 Socket 连接从 Adob​​e 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

进入

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

导致同样的错误。

有任何想法吗?

4

1 回答 1

0

我花了一段时间才弄清楚这一点,但像往常一样——“太多的活动部件让我很难发现问题”:

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

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

然而,事实证明一个正确的请求应该以\n\nnot结尾\r\n,所以这样做:

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

现在请求通过了,现在不再抛出错误。

于 2012-05-14T14:40:37.600 回答