Добавить заголовки к запросу в рельсах - PullRequest
11 голосов
/ 16 февраля 2012

Я использую Rails 3.2.1 для создания HTTP-поста.

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

Код:

post_data = {
  "username" => tabuser
}

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

Спасибо

Ответы [ 4 ]

12 голосов
/ 23 января 2015

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

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» (Accept: application/json) в приложение Rails, вы не можете сделать:

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

но сделать:

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

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

10 голосов
/ 19 февраля 2012

Эти примеры net :: http могут быть полезны?

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

7 голосов
/ 01 июня 2015

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

0 голосов
/ 17 мая 2018

Исходный вопрос был для 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...