我正在使用Rails 3.2.1制作HTTP Post。
我需要在标头中添加X-FORWARDED
FOR。我如何在Rails中做到这一点?
代码:
post_data = {
"username" => tabuser
}
response = Net::HTTP.post_form(URI.parse("http://<my php file>"), post_data)
由于
答案 0 :(得分:11)
我发现这个更具可读性
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
被盗然而!
如果你想发送&#39;接受&#39;标题(Accept: application/json
)到Rails应用程序,你做不到:
req.add_field("Accept", "application/json")
但是:
req['Accept'] = 'application/json'
原因是当Rails包含“,/”或“/”时忽略Accept标头并返回HTML(add_field
添加)。这是因为真正的老浏览器发送错误的&#34;接受&#34;头。
答案 1 :(得分:10)
这些net :: http示例可能有帮助吗?
https://github.com/augustl/net-http-cheat-sheet/blob/master/headers.rb
答案 2 :(得分:7)
两个答案都没问题,但我想补充一点。如果您使用的是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(已到达文件末尾)&#39;。
答案 3 :(得分:0)
最初的问题是 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)