Ruby on Rails HTTPS публикует неверный запрос

Всем привет.

Мое приложение работает с удаленным сервером. Сервер использует https-авторизацию сертификата. У меня есть следующий код для авторизации и отправки запроса:

uri = URI.parse("https://db1-test.content.ertelecom.ru/")
http = Net::HTTP.new(uri.host, '443')
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = File.join(File.dirname("public/certificate.pem"),
"certificate.pem")
http.start do |http|
      req =
Net::HTTP::Get.new("/cgi-bin/expr/export.get_pay_systems?partner_id=1003")
      responce = http.request(req)
      resp = responce.body
end

этот код работает хорошо, я получаю данные с сервера. НО, когда я пытаюсь сделать POST-запрос:

http.start do |http|
      req =
Net::HTTP::Post.new("/cgi-bin/expr/payment_transactions.verify_order",
params)
      responce = http.request(req)
      resp = responce.body
end

Я получаю сообщение об ошибке с сервера:

Your browser sent a request that this server could not understand.
Request header field is missing ':' separator.

что это такое? Я пытался найти решение, но безрезультатно. интернет ловил сообщение, что это может быть антивирус, но я на линуксе. Буду рад любым мыслям!


person Finist    schedule 12.11.2009    source источник


Ответы (1)


Вы не заполняете данные заголовка.

Вы можете либо использовать метод Net::HTTP.post_form для создания запроса, либо самостоятельно заполнить form_data.

решение post_form:

req = NET::HTTP.post_form("/cgi-bin/expr/payment_transactions.verify_order", params)

ручное заполнение form_data

req =
  Net::HTTP::Post.new("/cgi-bin/expr/payment_transactions.verify_order")
req.set_form_data(params)
person EmFi    schedule 12.11.2009
comment
странно... когда я пытаюсь использовать set_form_data, я получаю: неопределенный метод `set_form_data=' для #‹Net::HTTP::Post POST› и когда я использую post_form: у вас есть нулевой объект, хотя вы этого не ожидали! Произошла ошибка при оценке nil.+ - person Finist; 13.11.2009
comment
все работает! просто нужно было использовать следующий синтаксис: req.set_form_data(params) - person Finist; 13.11.2009