2012-02-15 38 views
8

Tôi đang sử dụng Rails 3.2.1 để tạo Bài đăng HTTP.Thêm tiêu đề vào yêu cầu trong đường ray

Tôi cần thêm X-FORWARDED FOR vào tiêu đề. Làm thế nào để tôi làm điều đó trong Rails?

Code:

post_data = { 
    "username" => tabuser 
} 

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

Cảm ơn

+0

Những mạng này :: ví dụ http có thể hữu ích? https://github.com/augustl/net-http-cheat-sheet/blob/master/headers.rb – house9

+0

Cảm ơn! Nếu bạn muốn đặt câu trả lời đó tôi sẽ chấp nhận nó –

+0

đã thêm nhận xét làm câu trả lời - Chúc mừng! – house9

Trả lời

9

Những net :: http ví dụ có thể hữu ích?

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

+1

Rất hữu ích. Cảm ơn bạn. – BlackHatSamurai

+0

Các câu trả lời chỉ liên kết được khuyến khích. Bạn có thể muốn có mã thực tế về cách thêm tiêu đề trong phần nội dung câu trả lời. –

+0

@AndrewGrimm - câu trả lời của tôi là từ hơn 5 năm trước. Trong khi không hoàn hảo nó là những gì nó được. – house9

7

Tôi tìm thấy điều này dễ đọc hơn

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 

bị đánh cắp từ http://www.dzone.com/snippets/send-custom-headers-rub

TUY NHIÊN !!

nếu bạn muốn gửi 'Chấp nhận' tiêu đề (Accept: application/json) để ứng dụng Rails, bạn không thể làm:

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

nhưng làm:

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

Lý do cho điều này mà Đường ray bỏ qua tiêu đề Chấp nhận khi nó chứa ", /" hoặc "/" và trả lại HTML (trong đó add_field thêm). Điều này là do các trình duyệt thực sự cũ gửi tiêu đề "Chấp nhận" không chính xác.

5

Cả hai câu trả lời đều ổn, nhưng tôi sẽ thêm một điều quan trọng. Nếu bạn đang sử dụng https, bạn phải thêm dòng mà bạn sử dụng 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) 

Without use_ssl này bạn sẽ nhận được 'EOFError (cuối tập tin đạt).

Các vấn đề liên quan