2012-05-04 92 views
0

我試圖通過BridgeTalk向使用Socket連接的本地Rails應用程序發出來自Adobe Illustrator腳本的HTTP請求(此問題實際上與JSX不相關)正如你所看到的 - 可能會出錯的很多;))。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期望在這裏,將不勝感激。


更新

看來,使用WEBrick預計請求行的最後一個回車:\r\n

不幸的是,我正在使用BridgeTalk在Bridge中執行一段代碼,這需要我在上述函數中使用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"); 

然而,事實證明,一個適當的請求應該在\n\n\r\n結束,所以使這個:

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

現在請求已經通過,現在更長時間拋出錯誤。

+0

我被掛了這一段時間,如果您打開連接爲「BINARY」,「connection.open(host,」BINARY「)」,則可以避開URL編碼的字符串。從工具指南: 'CRLF序列轉換爲LF,除非編碼設置爲BINARY。' – spencewah

+0

謝謝!如果我有機會,我會盡力去做。 – polarblau