2012-02-15 16 views
8

Estoy utilizando Rails 3.2.1 para hacer una publicación HTTP.Agregar encabezados a una solicitud en rieles

Necesito agregar X-FORWARDED FOR al encabezado. ¿Cómo hago eso en Rails?

Código:

post_data = { 
    "username" => tabuser 
} 

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

Gracias

+0

Estos ejemplos net :: http pueden ser útiles? https://github.com/augustl/net-http-cheat-sheet/blob/master/headers.rb – house9

+0

¡Gracias! Si quiere poner eso como respuesta, lo acepto –

+0

comentario agregado como respuesta - ¡Salud! – house9

Respuesta

7

Me parece más legible

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 

robados de http://www.dzone.com/snippets/send-custom-headers-rub

Sin embargo !!

si desea enviar 'Aceptar' cabecera (Accept: application/json) para aplicación Rails, no se puede hacer:

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

pero hacer:

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

La razón de esto que Rails ignora el encabezado Accept cuando contiene ", /" o "/" y devuelve HTML (que se agrega add_field). Esto se debe a que los navegadores realmente antiguos envían encabezados "Aceptar" incorrectos.

5

Ambas respuestas están bien, pero quisiera agregar una cosa importante. Si está utilizando https debe agregar la línea que utilice 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) 

Sin esta use_ssl obtendrá 'EOFError (final del archivo alcanzado)'.

Cuestiones relacionadas