【发布时间】:2011-02-06 23:54:51
【问题描述】:
我正在构建某种代理。
当我在机架应用程序中调用某个 url 时,我将该请求转发到另一个 url。
我转发的请求是一个带有文件和一些参数的 POST。
我想添加更多参数。
但是文件可能很大。所以我用Net::HTTP#body_stream而不是Net::HTTP#body发送它。
我以Rack::Request 对象的形式收到我的请求,并用它创建了我的 Net::HTTP 对象。
req = Net::HTTP::Post.new(request.path_info)
req.body_stream = request.body
req.content_type = request.content_type
req.content_length = request.content_length
http = Net::HTTP.new(@host, @port)
res = http.request(req)
我尝试了几种添加代理参数的方法。但在 Net::HTTP 中似乎没有任何内容允许将参数添加到 body_stream 请求,只能添加到正文。
有没有更简单的方法来代理这样的机架请求?还是一种将我的参数添加到我的请求的干净方式?
【问题讨论】:
-
为什么
req.set_form_data(:some => 'data')不起作用? -
因为它定义了
#body并重置了#body_stream,所以我丢失了所有之前定义的数据。