Прежде всего, извините за то, что я знаю, это ужасный идиоматический код Ruby.
Я пытаюсь выполнить серию запросов SOAP к Oracle CRM OnDemand с помощью сценария ruby, и у меня возникла проблема.Я могу просто выполнить запросы, используя Poster для 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 в файл, чтобы вы могли видеть сообщения, если это полезно.
Спасибо!