2015-09-29 54 views
0

我試圖模仿下面的curl命令完美的作品:從Ruby來的Perl,POST數據消失

curl -k -i -d @content.json -H "Content-Type: application/json" -H "Accept: applicaztion/json" https://localhost:909/api/authenticateUser 

我模仿的Ruby/Rails curl命令。我正在使用剩餘客戶端的寶石。目標是用舊式Perl編寫的API。問題是,API不會「看到」在新的紅寶石代碼中發送的有效載荷:

pload = '<string>'.to_json 
response = RestClient::Request.execute(url: 'https://localhost:909/api/authenticateUser', method: :post, payload: pload, accept: :json, content_type: :json, verify_ssl: false) 

問題出在哪裏?我的Ruby代碼是壞的還是Perl代碼「太愚蠢/過時」來從Ruby獲取有效載荷。這是Perl代碼:

my $data = $cgi->param('POSTDATA') || ""; 

我傾向於認爲這個問題是我的Ruby代碼,因爲舊的Perl代碼從curl命令接收有效載荷正常上方,並與其他一些老Perl代碼。

感謝您的幫助。

+0

你有看着那嫋嫋屬請求tes與Ruby生成的相比較嗎? –

+0

你實際上是在發送Accept:applica ** z ** tion/json,還是將它複製到SO中時出錯? – hobbs

+0

'curl -d'從它發佈的數據中去掉回車符和換行符,可能服務器取決於所有數據在一行上,不知何故? – hobbs

回答

1

對於POSTDATA要填充,

  1. 該請求必須具有Content-Length頭
  2. 請求的Content-Length頭的值必須爲非零。
  3. 請求方法必須是POST
  4. 該請求必須具有Content-Type標頭。
  5. 請求的Content-Type頭的值必須不包括任何以下的:

    • 應用程序/ x-WWW窗體-urlencoded
    • 的multipart/form-data的
    • 應用/ XML
    • 多重/相關
+0

我並沒有明確提出「內容長度」,我認爲這是一個安全的假設,其餘客戶端在幕後做這件事。請求方法是post。 Content-Type是「application/json」(與curl相同)。 – pirhac