[英]Problem with ruby net::HTTP issuing a SOAP request
首先,對我所知可怕的慣用Ruby代碼感到抱歉。
我試圖使用ruby腳本向Oracle CRM OnDemand發出一系列SOAP請求,但遇到了問題。 我可以使用Poster for FireFox很好地發出請求,但是當我嘗試用Ruby發出請求時,它會返回以下內容:
內部錯誤:會話不可用。 中止。
Oracle CRM OnDemand需要授權會話cookie。 下面是我正在使用的代碼:
httpOracle = Net::HTTP.new(ORACLE_BASE_URL, ORACLE_PORT)
httpOracle.use_ssl = true
httpOracle.verify_mode = OpenSSL::SSL::VERIFY_NONE
httpOracle.set_debug_output $stderr
begin
# CONNECT TO ORACLE AND RETRIEVE A SESSION ID
pathOracle = buildOracleLoginPath()
headOracle = { "username" => ORACLE_USERNAME,
"password" => ORACLE_PASSWORD }
respOracle = httpOracle.request_head(pathOracle, headOracle)
authOracle = respOracle['set-cookie']
.gsub(/ /, '')
.split(';')
.find_all { |item| item.match(/^JSESSIONID=/) }[0].to_s
# RETRIEVE ALL ORACLE LEADS
pathOracle = buildOraclePath(authOracle)
headOracle = { "soapaction" => buildOracleSOAPAction("Lead", "QueryPage"),
"Content-Type" => "text/xml" }
rqstOracle = loadPostData 'soap.xml' # Loads file with SOAP payload as a string
respOracle = httpOracle.request_post(pathOracle, rqstOracle, headOracle)
puts respOracle # for testing
rescue
puts "Error #{$!}"
ensure
# CLOSE THE CONNECTION TO ORACLE
pathOracle = buildOracleLogoffPath()
headOracle = { authOracle.split('=')[0] => authOracle.split('=')[1] }
respOracle = httpOracle.request_head(pathOracle, headOracle)
end
我可以獲取每個命令的輸出,然后通過Poster(登錄,查詢,注銷)將其泵入,這樣可以正常工作,但是由於某種原因,將其捆綁在腳本中似乎有些不對。
我想知道是否可能嘗試將同一Net :: HTTP用於多個連接是問題? 還是我只是沒有正確使用它?
如果有人需要它,我可以嘗試找出如何將http輸出重定向到文件的方法,以便您可以查看發布信息(如果有幫助的話)。
謝謝!
我想鍵入它可以為我提供更多搜索條件,而我偶然發現了此博客文章 。 盡管我仍然想知道自己在做錯什么(我想我必須使用類似http.start {}的東西才能使它工作),以及我的代碼與單擊Poster中的按鈕有何不同,並添加WS-SECURITY標頭SOAP請求通過使其成為無狀態請求來完全解決了問題,而不必在整個過程的生命周期內維護狀態。
感謝所有花時間閱讀本文的人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.