2012-10-11 77 views
1

在看着越來越壞請求紅寶石:Escaping parameters in set_form_data POST,並且Ruby on Rails HTTPS Post Bad Request在軌道上的SSL後

def send_request(params) 
    host = "https://hc.mercurydev.net" 
    uri = URI.parse(host) 
    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

    xml = build_xml_for_checkout(params) 


    http.start do |http| 
     req = Net::HTTP::Post.new('http://www.mercurypay.com/InitializePayment') 
     header = {'Host' => 'hc.mercurydev.net', 'Content-Type' => 'text/xml; charset=utf-8', 'Content-Length' => 'length', 'SOAPAction' => 'http://www.mercurypay.com/InitializePayment'} 
     req.set_form_data(header, xml) 
     response = http.request(req) 

    end 
    end 

這是我第一次不得不建立紅寶石我自己的崗位要求,我敢肯定,我很想念有些簡單,但是什麼?

- 我確認xml是100%好的,所以它必須是我的頭文件或我如何構建請求的東西。

編輯:看着ruby-api-doc後:我想出了這一點:

uri = URI.parse(host) 

Net::HTTP.start(uri.hostname, uri.port, 
     :use_ssl => uri.scheme == 'https').start do |http| 

    req = Net::HTTP::Post.new uri.path 
    req.body = xml 
    req.set_form_data(header) 

res = http.request req 
end 

它返回(即使我重新啓動我的服務器),我有一個開放的HTTP會話。

+0

沒有人知道這件事嗎? – Ryan

回答

3

因此結束了這一點:

http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

req = Net::HTTP::Post.new(uri.request_uri) 
req.body = xml.to_s 
req.initialize_http_header(header) 

response = http.request(req) 

,我缺的是對initialize_http_header()一旦我在那裏的SOAP API接受了我的提交,然後只是確保我的語法的問題的關鍵是正確的。