2012-06-29 40 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