HTTP:“ERROR错误的请求行”

时间:2012-05-04 14:52:20

标签: http escaping jsx extendscript

我正在尝试从Adobe Illustrator脚本(此问题与JSX无关)通过BridgeTalk向使用Socket连接的本地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

造成同样的错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

花了一段时间才弄明白这一点,但是像往常一样 - “太多的活动部件让人难以发现问题”:

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

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

然而,事实证明,正确的请求应以\n\n而不是\r\n结束,因此请执行以下操作:

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

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