在rails中向请求添加标头

我正在使用Rails 3.2.1制作HTTP Post。

我需要在标题中添加X-FORWARDED FOR。 我如何在Rails中做到这一点?

码:

 post_data = { "username" => tabuser } response = Net::HTTP.post_form(URI.parse("http://"), post_data) 

谢谢

这些net :: http示例可能有帮助吗?

https://github.com/augustl/net-http-cheat-sheet/blob/master/headers.rb

我发现这更具可读性

 require "net/http" require "uri" url = URI.parse("http://www.whatismyip.com/automation/n09230945.asp") req = Net::HTTP::Get.new(url.path) req.add_field("X-Forwarded-For", "0.0.0.0") req.add_field("Accept", "*/*") res = Net::HTTP.new(url.host, url.port).start do |http| http.request(req) end puts res.body 

从http://www.dzone.com/snippets/send-custom-headers-rub偷来的

不过!!

如果你想向Rails应用程序发送’Accept’标题( Accept: application/json ),你不能这样做:

req.add_field("Accept", "application/json")

但是:

req['Accept'] = 'application/json'

原因是当Rails包含“,/”或“/”时忽略Accept标头并返回HTML( add_field添加)。 这是因为很老的浏览器发送了不正确的“Accept”标头。

两个答案都可以,但我会添加一个重要的事情。 如果您使用https,则必须添加使用ssl的行:

 url = URI.parse('https://someurl.com') http = Net::HTTP.new(url.host, url.port) http.use_ssl = true req = Net::HTTP::Get.new(url.request_uri) req["header_name"] = header response = http.request(req) 

如果没有这个use_ssl,你将获得’EOFError(到达文件末尾)’。

最初的问题是我正在寻找的httppost 。 我将为其他可能正在寻找的人提供此解决方案:

 require 'net/http' uri = URI.parse("http://") header = {'X-Forwarded-For': '0.0.0.0'} # Create the HTTP objects http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri, header) # Send the request response = http.request(request)