我在rails 2.3.11、savon 1.1.0、wasabi 2.5.0、httpi 1.1.1和httpclient 2.2.7中使用ruby 1.8.7
每当我运行我的脚本:
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'savon'
client = Savon::Client.new do |wdsl, http|
wdsl.document = 'https://www.atmosfair.de:8443/service/AtmosfairEmissionService3?wsdl'
http.auth.ssl.verify_mode = :none
http.auth.basic "user", "password"
end
client.request :wdsl, "getFlightEmission" do
soap.body = {
:departure => "VIE",
:arrival => "DUB"
}
end我明白了:
HTTPI使用来自/usr/ /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient/session.rb:757:in
connect' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient/timeout.rb:131:intimeout‘/rvm/gems/ruby1.8.7的httpclient适配器/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient/session.rb:300:inconnect': SSL\_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert unexpected message (OpenSSL::SSL::SSLError) from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient/session.rb:300:inssl_connect’执行HTTP。p370/gems/httpclient-2.2.7/lib/httpclient/session.rb:748:inconnect' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient/session.rb:606:inquery‘从/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient/session.rb:161:inquery' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient.rb:1070:indo_get_block’到/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient.rb:873:indo\_request' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient.rb:966:inprotect_keep_/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient.rb:872:indo\_request' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient.rb:760:inrequest‘和/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpclient-2.2.7/lib/httpclient.rb:663:inget' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpi-1.1.1/lib/httpi/adapter/httpclient.rb:24:inget’来自/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpi-1.1.的alive_disconnected‘1/lib/httpi/adapter/httpclient.rb:64:indo\_request' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpi-1.1.1/lib/httpi/adapter/httpclient.rb:23:inget‘来自/usr/ /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpi-1.1.1/lib/httpi.rb:86:inget' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpi-1.1.1/lib/httpi.rb:193:inwith_adapter’/rvm/gems/ruby的/usr/local/rvm/gems/ruby-1.8.7-p370/gems/httpi-1.1.1/lib/httpi.rb:84:inget' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/savon-1.1.0/lib/savon/wasabi/document.rb:34:inresolve_document‘-1.8.7-p370/gems/savon-1.1.0/lib/savon/wasabi/document.rb:15:inxml' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/wasabi-2.5.0/lib/wasabi/document.rb:131:inparse‘从/usr/local/rvm/gems/ruby-1.8.7-p370/gems/wasabi-2.5.0/lib/wasabi/document.rb:118:inparser' from /usr/local/rvm/gems/ruby-1.8.7-p370/gems/wasabi-2.5.0/lib/wasabi/document.rb:61:insoap_actions’到脚本/atmosFair.rb:28
而SoapUI给了我:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:FlightEmission xsi:type="ns1:FlightEmissionData" xmlns:ns1="http://www.atmosfair.de/2009/07/travel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CO2>0.19</CO2>
<offset>5.0</offset>
<distance>1733</distance>
<CO2PerPkm>0.0</CO2PerPkm>
<CO2InCriticalAltitudes>0.13</CO2InCriticalAltitudes>
<CO2RFI2>0.32</CO2RFI2>
<CO2RFI27>0.41</CO2RFI27>
<CO2RFI3>0.45</CO2RFI3>
<CO2RFI4>0.59</CO2RFI4>
<keroseneConsumption>0.06</keroseneConsumption>
<keroseneConsumptionInCriticalAltitudes>0.04</keroseneConsumptionInCriticalAltitudes>
<specificFuelConsumptionAverage>4.31</specificFuelConsumptionAverage>
<offsetCO2RFI2>8.0</offsetCO2RFI2>
<offsetCO2RFI27>11.0</offsetCO2RFI27>
<offsetCO2RFI3>11.0</offsetCO2RFI3>
<offsetCO2RFI4>15.0</offsetCO2RFI4>
</ns1:FlightEmission>
</soapenv:Body>
</soapenv:Envelope>知道吗,我做错什么了?
发布于 2012-10-24 16:37:13
我解决了这个问题,方法是使用限制,而不是httpclient:
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'iconv'
require 'curb'
require 'savon'
HTTPI.adapter = :curb
client = Savon::Client.new do |wdsl, http|
http.headers = { "Content-Length" => "0", "Connection" => "Keep-Alive" }
http.auth.basic "user", "password"
wdsl.document = 'https://www.atmosfair.de:8443/services/AtmosfairEmissionService3?wsdl'
end
client.http.auth.ssl.verify_mode = :none
response = client.request :wdsl, "getFlightEmission" do
soap.body = {
:departure => "VIE",
:arrival => "DUB"
}
end现在一切都很好!
https://stackoverflow.com/questions/12076300
复制相似问题