0

私はAdobeIllustratorスクリプト(この質問は実際には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

同じエラーが発生します。

何か案は?

4

1 に答える 1

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");

これでリクエストが通過し、エラーがスローされるようになりました。

于 2012-05-14T14:40:37.600 に答える