2012-06-29 82 views
0

我需要在Rails中將一些數據發佈到外部ASP。Ruby on Rails net/http發佈' r n'

我curl命令工作:

printf 'foo=bar\r\nparameter1=4711\r\nparameter2=4712' | curl --data-binary @- http://example.com/request.asp 

如何做到這一點,淨/ HTTP?

保持參數之間的'\ r \ n'非常重要。

我至今編碼:

uri = URI.parse('http://example.com/request.asp') 

http = Net::HTTP.new(uri.host, uri.port) 

req = Net::HTTP::Post.new(url.request_uri) 
req.set_form_data(params) 
response = http.request(req) 

如何設置PARAMS?

我想是這樣的:

params = { 
    'foo' => 'bar\r\n', 
    'parameter1' => '4711\r\n', 
    'parameter2' => '4712' 
} 

但它不工作。我需要編碼它,但如何?

我試着用'\ r \ n'的URL編碼版本:%0D%0A但它沒有工作。有沒有什麼方法可以像curl那樣發送二進制文件?

謝謝。

編輯:感謝您的回答我找到了解決辦法:

uri = URI.parse('http://example.com/request.asp') 

http = Net::HTTP.new(uri.host, uri.port) 

req = Net::HTTP::Post.new(url.request_uri) 
req.body = "foo=bar\r\nparameter1=4711\r\nparameter2=4712" 
response = http.request(req) 

set_form_data一)編碼和b)增加了 「&」 既沒有我需要的。直接設置身體是解決方案。

+0

看到這個問題:http://stackoverflow.com/questions/1252210/parametrized-get-request-in-ruby – arnep

+0

但我不想要一個GET,我想要一個POST – Calmon

+0

在他使用' POST'請求​​ – arnep

回答

1

如果它確定這\r\n和所有,但第一=獲取URL的POST數據編碼你可以嘗試:

params = { 
    'foo' => 'bar\r\nparameter1=4711\r\nparameter2=4712' 
} 

什麼是主要的問題,擺脫了對分離&的或\r\n應被髮送未編碼?或兩者?

+0

謝謝你給我帶來了正確的方式!我將解決方案發布到第一篇文章中。 – Calmon

1

只是解決方案的一部分,但你不能嵌入的轉義字符如\ r和\ n的單引號的文本在Ruby中:

'I like\r\nthe newlines' # Won't work 
"I like\r\nthe newlines" # Will work 

乾杯!

+0

感謝您的信息!朝着正確的方向邁出了一步,但它仍然錯過了某些東西(不起作用) – Calmon