1

我需要将 Rails 中的一些数据发布到外部 ASP。

我的 curl 命令正在运行:

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

如何使用 net/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 = {
  'foo' => 'bar\r\n',
  'parameter1' => '4711\r\n',
  'parameter2' => '4712'
}

但它不起作用。我需要对其进行编码,但如何编码?

我尝试使用 '\r\n': %0D%0A 的 URL 编码版本,但它不起作用。有没有办法像 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 a) 编码和 b) 添加“&”我不需要。直接设置身体是解决方案。

4

2 回答 2

1

只是解决方案的一部分,但您不能在 Ruby 的单引号文本中嵌入转义字符,例如 \r 和 \n:

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

干杯!

于 2012-06-29T14:19:09.773 回答
1

如果没关系,\r\n除了第一个=在 POST 数据中编码的 URL,您可以尝试:

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

主要问题是什么,摆脱对分隔符&还是\r\n应该以未编码的方式发送?或两者?

于 2012-06-29T15:58:19.130 回答