Rails 3.2.1を使用してHTTPPOSTを作成しています。
ヘッダーにX-FORWARDED
FORを追加する必要があります。 Railsでそれを行うにはどうすればよいですか?
コード:
post_data = {
"username" => tabuser
}
response = Net::HTTP.post_form(URI.parse("http://<my php file>"), post_data)
リクエストオブジェクトに設定できます。
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
これはもっと読みやすいと思います
_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」ヘッダーを送信するブラウザ。
どちらの答えも大丈夫ですが、重要なことを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(ファイルの終わりに達しました)」が発生します。
元々の質問は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)