2012-05-04 20 views
0

私はAdobe Illustrator ScriptからHTTPリクエストを作成しようとしていますが(この質問は実際はJSX関連ではありませんが)、BridgeTalk経由でソケット接続を使ってローカルのRailsアプリケーションにあなたが見ているように - それは間違っている可能性があります;))。HTTP: "ERROR bad Request-Line"

が最後に通過要求を取得するために管理しますが、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が期待していることについての助力やヒントがあれば、大歓迎です。 \r\n


アップデートは

WEBrickには、要求行の末尾でキャリッジリターンを期待しているようです。

残念ながらBridge内でBridgeTalkを使用しており、上記の関数でuneval()またはtoSource()を使用する必要があります。これらは、同じエラーの原因となっ

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

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

変換、バックスラッシュをエスケープするように見えます。

アイデア?

答えて

0

は、私は、これは考え出しましたまで、しばらく時間がかかったが、いつものように - 「あまりにも多くの可動部品は、それが困難な問題を発見するために作っている」:

は、キャリッジリターンのエンコードされたバージョンを使用して要求を定義し、デコード先に役立ちます。

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

、それは適切な要求はない\r\n\n\nで終わるので、これを作成する必要があることが判明しました

これでリクエストが送信され、エラーが長くなりました。

+0

これをしばらくやめてしまったのですが、接続を "BINARY"、 'connection.open(host、" BINARY ")'として開くと、URLエンコードされた文字列を避けることができます。ツールガイド: 'CRLFシーケンスは、エンコードがBINARYに設定されていない限り、LFに変換されます。 ' – spencewah

+0

ありがとう!私はチャンスがあれば、それを行こう。 – polarblau

関連する問題