2016-03-18 13 views
1

Ich muss auf einen Dienst mit einer IP-Whitelist von Heroku zugreifen, die Notwendigkeit eines HTTP-Proxy.Verwenden Sie HTTP-Proxy mit Savon

konfigurierte ich der Proximo add on, und eine Proxy-URL hat, die etwa wie http://proxy:[email protected]

In Savon sieht, habe ich versucht, einen Proxy wie so konfiguriert:

client = Savon.client(wsdl: my_wsdl, proxy: "http://proxy:[email protected]") 

Aber wenn ich eine Anfrage :

client.operations

ich einen Proxy-Fehler:

Wasabi::Resolver::HTTPError: Error: 407 for url http://mywsdl 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/wasabi3.5.0/lib/wasabi/resolver.rb:45:in `load_from_remote' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/wasabi3.5.0/lib/wasabi/resolver.rb:33:in `resolve' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/wasabi3.5.0/lib/wasabi/document.rb:142:in `xml' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/wasabi-3.5.0/lib/wasabi/document.rb:160:in `parse' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/wasabi-3.5.0/lib/wasabi/document.rb:147:in `parser' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/wasabi-3.5.0/lib/wasabi/document.rb:64:in `soap_actions' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/savon-2.11.1/lib/savon/client.rb:28:in `operations' 
     from (irb):7 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/railties-4.2.4/lib/rails/commands/console.rb:110:in `start' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/railties-4.2.4/lib/rails/commands/console.rb:9:in `start' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:68:in `console' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
     from /Users/ahamon/.gem/ruby/2.3.0/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

Alles funktioniert gut ohne die Proxy-Option, obwohl.

+0

Ich denke, der Benutzer: Passwort @ URL-Syntax funktioniert nur in einem Browser. Sie können die Standardauthentifizierung versuchen. –

+0

Soweit ich sagen kann, die Savon-Dokumente nicht angeben, wie der Proxy weiter konfigurieren (in Version 2) @SteffenRoller – AndrewH

+0

Ich denke, weil die Proxy-Konnektivität eine Funktion des zugrunde liegenden HTTP-Moduls ist, die sich unterscheiden kann. Benutze die Quelle, Luke! –

Antwort

1

arbeiten sollte ich glaube, ich eine Lösung gefunden. Die Schwierigkeit besteht darin, die WSDL manuell abzurufen und in einer lokalen Datei zu speichern. Eg.

curl http://www.webservicesx.net/globalweather.asmx?wsdl > globalweather.wsdl 

Sie haben die folgenden für Ihre Kunden Definition

... 
secret = Base64.strict_encode64("#{user}:#{password}") 
client = Savon.client(
    wsdl: 'globalweather.wsdl', 
    proxy: "http://my-proxy.example.com:8080", 
    headers: { "Proxy-Authorization" => "BasiC#{secret}" }, 
    ... 
) 

Das ist im Grunde um es hinzuzufügen. Sie können auch komplett ohne WSDL arbeiten, indem Sie namespace und endpoint direkt angeben.

Savon verwendet Wasabi zur Verarbeitung der WSDL. Es ruft auch das Dokument vom Server ab. Wasabi verwendet nicht die Parameter aus Savons Client-Definition. Um es zu ändern, müsste man den Wasabi-Edelstein erweitern.

Ein laufendes Skript kann hier gefunden werden: http://pastebin.com/t8NTuGKK.

+0

Hey Steffen, ich überprüfe es! Ich habe versucht, Proxy-Authorization zuvor im Header zu setzen, aber ohne die WSDL separat herunterzuladen. – AndrewH

+0

Das hat funktioniert, danke! – AndrewH

+0

Ha - Ich habe meine erste Bounty gewonnen - whoo hoo :-) –

0

Ich denke, das

client = Savon.client(wsdl: my_wsdl, proxy: "http://proxy-0-0-0-0.proximo.io", basic_auth: ["proxy-user", "proxy-secret"]) 
+0

basic_auth [scheint eine Konfigurationsoption für den Zugriff auf die SOAP-Ressource zu sein, nicht der Proxy] (http://savonrb.com/version2/globals.html). Wie auch immer, ich habe es vergebens versucht. – AndrewH