web-dev-qa-db-ja.com

rails)のリクエストにヘッダーを追加します

Rails 3.2.1を使用してHTTPPOSTを作成しています。

ヘッダーにX-FORWARDEDFORを追加する必要があります。 Railsでそれを行うにはどうすればよいですか?

コード:

post_data = {
  "username" => tabuser
}

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

リクエストオブジェクトに設定できます。

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の例を参照してください。

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

10
house9

これはもっと読みやすいと思います

_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」ヘッダーを送信するブラウザ。

14
equivalent8

どちらの答えも大丈夫ですが、重要なことを1つ追加します。 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(ファイルの終わりに達しました)」が発生します。

8
tommybernaciak

元々の質問は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)
1
Tom Rossi