我希望进行一次HTTP POST请求,看起来像是从浏览器中提交的HTML表单。具体地,需要提交一些文本字段和一个文件字段。
提交文本字段很简单,net/http的rdocs中已经有示例了,但我不知道如何同时提交文件。
Net::HTTP似乎不是最好的选择。Curb看起来不错。
HTTParty.post(
'http://localhost:3000/user',
body: {
name: 'Foo Bar',
email: 'example@email.com',
avatar: File.open('/full/path/to/avatar.jpg')
}
)
https://github.com/jnunemaker/httparty/blob/master/examples/multipart.rb
https://github.com/jnunemaker/httparty
gem install httparty
我遇到了同样的问题(需要发布到jboss web服务器)。Curb对我来说很好用,但是当我在代码中使用会话变量时(ruby 1.8.7 on ubuntu 8.10),它会导致Ruby崩溃。
我查看了rest-client文档,没有发现多部分支持的迹象。我尝试了上面的rest-client示例,但是jboss说http post不是多部分的。
multipart-post宝石与Rails 4 Net :: HTTP非常配合,没有其他特殊的宝石
def model_params
require_params = params.require(:model).permit(:param_one, :param_two, :param_three, :avatar)
require_params[:avatar] = model_params[:avatar].present? ? UploadIO.new(model_params[:avatar].tempfile, model_params[:avatar].content_type, model_params[:avatar].original_filename) : nil
require_params
end
require 'net/http/post/multipart'
url = URI.parse('http://www.example.com/upload')
Net::HTTP.start(url.host, url.port) do |http|
req = Net::HTTP::Post::Multipart.new(url, model_params)
key = "authorization_key"
req.add_field("Authorization", key) #add to Headers
http.use_ssl = (url.scheme == "https")
http.request(req)
end