簡體   English   中英

ruby net :: HTTP發出SOAP請求的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM