2012-02-15 2 views
8

Я использую Rails 3.2.1 для создания HTTP-сообщения.Добавить заголовки к запросу в rails

Мне нужно добавить X-FORWARDED ДЛЯ заголовка. Как это сделать в Rails?

Код:

post_data = { 
    "username" => tabuser 
} 

response = Net::HTTP.post_form(URI.parse("http://<my php file>"), post_data) 

Благодаря

+0

Эти примеры: :: http могут быть полезны? https://github.com/augustl/net-http-cheat-sheet/blob/master/headers.rb – house9

+0

Спасибо! Если вы хотите выразить это как ответ, я приму это –

+0

добавил комментарий в качестве ответа - Привет! – house9

ответ

9

Эти чистые :: HTTP примеры могут быть полезны?

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

+1

ОЧЕНЬ полезно. Спасибо. – BlackHatSamurai

+0

Ответы только на связь не приветствуются. Вы можете иметь фактический код о том, как добавлять заголовки в тело ответа. –

+0

@AndrewGrimm - мой ответ более 5 лет назад. Хотя это и не идеально, это то, что есть. – house9

7

Я нахожу это более читаемым

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

ОДНАКО !!

если вы хотите отправить 'Принять' заголовок (Accept: application/json) для приложения Rails, вы не можете сделать:

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

но сделать:

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

Причиной этого, что Rails игнорирует заголовок Accept, когда он содержит «, /» или «/», и возвращает HTML (который добавляет add_field). Это связано с тем, что действительно старые браузеры отправляют неверные заголовки «Принять».

5

Оба ответа в порядке, но я бы добавил одну важную вещь. Если вы используете протокол 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 (конец файла достигнут).

Смежные вопросы