Ruby on rails 在rails中向请求添加头

Ruby on rails 在rails中向请求添加头,ruby-on-rails,http,header,Ruby On Rails,Http,Header,我正在使用Rails 3.2.1制作一个HTTP Post 我需要将的X-FORWARDED添加到标题中。在Rails中如何做到这一点 代码: post\u数据={ “用户名”=>tabuser } response=Net::HTTP.post\u表单(URI.parse(“HTTP:/”),post\u数据) 可以在请求对象上设置: request = Post.new(url) request.form_data = params request['X-Forwarded-For'] =

我正在使用Rails 3.2.1制作一个HTTP Post

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

代码:

post\u数据={
“用户名”=>tabuser
}
response=Net::HTTP.post\u表单(URI.parse(“HTTP:/”),post\u数据)

可以在请求对象上设置:

request = Post.new(url)
request.form_data = params
request['X-Forwarded-For'] = '203.0.113.195'
request.start(url.hostname, url.port,
        :use_ssl => url.scheme == 'https' ) {|http|
    http.request(request) }
请参见以下Net::HTTP示例:


我觉得这更具可读性

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
偷自

然而

如果要将“Accept”头(
Accept:application/json
)发送到Rails应用程序,则无法执行以下操作:


请求添加字段(“接受”、“应用程序/json”)

但要做到:


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


原因是Rails在包含“、/”或“/”时忽略Accept头,并返回HTML(其中
add\u字段
adds)。这是因为非常旧的浏览器发送了不正确的“接受”标题。

两个答案都可以,但我要补充一件重要的事情。如果您使用的是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)

如果不使用ssl,您将获得“EOFError(已到达文件结尾)”。

最初的问题是关于http post的,这正是我所寻找的。我将为其他可能正在寻找的人提供此解决方案:

require 'net/http'

uri = URI.parse("http://<my php file>")

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)
需要“net/http”
uri=uri.parse(“http://”)
header={'X-Forwarded-For':'0.0.0'}
#创建HTTP对象
http=Net::http.new(uri.host,uri.port)
request=Net::HTTP::Post.new(uri.request\u uri,头)
#发送请求
response=http.request(请求)

这些net::http示例可能会有帮助吗?谢谢如果你想把它作为一个答案,我会接受它添加的评论作为答案-干杯!不鼓励仅链接的答案。您可能想知道如何在答案正文中添加标题的实际代码。@Andrewgrim-我的答案是5年前的。虽然不是完美的,但它是完美的。如果需要ssl,这一点非常关键,因为您可以构建完美的请求,但仍然会得到“400错误请求”响应。
require 'net/http'

uri = URI.parse("http://<my php file>")

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)