如何在Ruby中发送HTTP PUT请求?

20

我正在试图向特定的URL发送PUT请求,但至今未能成功。

如果我通过HTTP请求GUI(例如这个),在以下URL上进行PUT操作即可:

http://www.mywebsite.com:port/Application?key=apikey&id=id&option=enable|disable

注意,上面的请求中指定了一个端口号,在通过Ruby代码提交请求时,我也需要这样做。

如何在Ruby中复制此类请求?


使用restclient gem; 有一个PUT方法。没有关于你所说的问题的具体信息,不确定还能说什么。 - Dave Newton
restclient非常出色,如果您不想要更多的依赖项,可以使用标准库中的net/http:http://www.rubyinside.com/nethttp-cheat-sheet-2940.html - jtesch
我尝试过使用restclient和net/http,但两者都没有成功。我相信这是因为我自己的某些错误或知识缺失。如果能进一步解释如何使用它们,将不胜感激。我更喜欢使用net/http而不是restclient。 - finiteloop
如果您能准确地展示您试图访问的服务,将会更清晰易懂。您确定需要使用PUT请求吗?看起来更像是您想要使用GET请求来获取一些数据? - peterept
抱歉,peterept,这是一项工作,我不能透露更多细节。不过,这是一个PUT请求,而不是GET请求。哈哈,我已经实现了GET请求。 - finiteloop
1个回答

34
require 'net/http'

port = 8080
host = "127.0.0.1"
path = "/Application?key=apikey&id=id&option=enable"

req = Net::HTTP::Put.new(path, initheader = { 'Content-Type' => 'text/plain'})
req.body = "whatever"
response = Net::HTTP.new(host, port).start {|http| http.request(req) }
puts response.code

Larry的回答帮助我找对了方向。再多挖掘一些资料,我找到了一个更优雅的解决方案,受到这个答案的指导。

http = Net::HTTP.new('www.mywebsite.com', port)
response = http.send_request('PUT', '/path/from/host?id=id&option=enable|disable')

我应该在哪里包含我的请求参数? - finiteloop
3
Larry,非常感谢您的帮助。感谢您抽出时间来完成这件事。 - finiteloop
5
send_request需要三个参数,第三个参数是你要 'PUT' 的数据。为了让内容更加通俗易懂,我可以这么翻译:在使用 send_request 时,需要提供三个参数,其中第三个参数为你想要进行 'PUT' 操作的数据。 - rampion
send_request函数还可以使用第四个参数来传递自定义的请求头。 - jaybrau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接