6 Stimmen

Perl SOAP::WSDL greift auf HTTPS zu Unscharfer Fehler

Ich versuche, eine Perl-Bibliothek zu generieren, um eine Verbindung zu einem WebService herzustellen. Dieser Webservice befindet sich auf einem HTTPS-Server und mein Benutzer hat Zugriff darauf.

Ich habe wsdl2perl.pl mehrere Male mit verschiedenen Optionen ausgeführt, und es schlägt immer mit der Meldung fehl: Unauthorized at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 73. Das Problem ist, wenn ich meinen Benutzer/Pass nicht als Argumente angebe, werden sie nicht einmal abgefragt.

Ich habe [SOAP::WSDL::Manual::Cookbook] (http://search.cpan.org/~mkutter/SOAP-WSDL-2.00.10/lib/SOAP/WSDL/Manual/Cookbook.pod) gelesen und getan, was dort über HTTPS steht: Crypt::SSLeay ist installiert, und sowohl SOAP::WSDL::Transport::HTTP als auch SOAP::Transport::HTTP sind geändert.

Können Sie einen Hinweis darauf geben, was falsch laufen könnte?

0voto

Vladimir Georgiev Punkte 1951

Können Sie über Ihren Webbrowser frei auf die WSDL-Datei zugreifen? Kann eine andere Person in Ihrem Netzwerk ohne Probleme darauf zugreifen?

Vielleicht verlangt der Webserver, der die WSDL-Datei hostet, Basic oder eine andere Art der Authentifizierung...

0voto

wuchang Punkte 2883

Wie Sie wissen, ist Perl eine Open-Source-Sprache, obwohl es das Soap-Protokoll unterstützt, aber seine Unterstützung scheint nicht sehr standardmäßig zu sein. zunächst ist sein Dokument nicht sehr klar. und auch seine Unterstützung ist manchmal begrenzt. schließlich gibt es immer hier und da Fehler.

Wenn Sie also wsdl2perl verwenden müssen, können Sie Komodo verwenden, um in den Code einzudringen und herauszufinden, was passiert ist. Das ist genau das, was ich getan habe, als ich Perl als Webservice-Client verwendet habe.Sie wissen, dass hinter https SSL steht, wenn also Ihr SSL auf einem autorisierten Zertifikat basiert, müssen Sie Ihren Zertifikatspfad und die Liste der vertrauenswürdigen Serverzertifikate einrichten. Sie sollten besser linux-basierte firefox verwenden, um einen Test zu haben. wie ich weiß, können Sie firefox's cert Pfad und firefox's vertrauenswürdige cert-Liste einrichten. wenn firefox mit Ihrem Web-Service-Server erfolgreich kommunizieren kann, dann, es ist Zeit, Ihre Perl-Client zu debuggen.

0voto

Peter Edwards Punkte 61

Um Situationen mit Perl und SOAP zu debuggen, schalten Sie einen Web-Proxy ein, damit Sie genau sehen können, welche Daten übergeben werden und welche Antwort vom Server zurückkommt. Ich nehme an, dass Sie eine 401 Nicht autorisiert erhalten haben, aber vielleicht enthält die Serverantwort noch weitere Details.

Beide Fiddler http://docs.telerik.com/fiddler und Charles Stellvertreter https://www.charlesproxy.com/ kann dies tun.

0voto

Patrick Mevzek Punkte 9353

Die von Ihnen zitierte Fehlermeldung scheint von dieser Zeile zu stammen: die $response->message() if $response->code() ne '200'; und in der HTTP-Welt, Unauthorized ist eindeutig der Fehlercode 401, was bedeutet, dass Ihre Website einen Benutzernamen und ein Passwort verlangt (höchstwahrscheinlich kann eine Website diesen Fehlercode "entführen", um andere Bedingungen wie einen Filter auf der Quell-IP zu erfüllen). Haben Sie sie?

Wenn ja, können Sie

  • nach wdsl2perl ausgeführt wurde, finden Sie in den erstellten Dateien die Stelle, an der set_proxy() aufgerufen wird, und ändern Sie die URL dort so, dass sie den Benutzernamen und das Passwort enthält: ...->set_proxy('http://USERNAME:PASSWORD@www.example.com/...')
  • oder in Ihrem Code, nach der Instanziierung der SOAP::WSDL Objekt, Aufruf service(SERVICENAME) darauf (für jeden Dienst, den Sie in Ihrer WSDL-Datei definiert haben), wodurch Sie ein neues Objekt erhalten, für das Sie die transport() um auf das zugrundeliegende Transportobjekt zuzugreifen, mit dem Sie die proxy() mit der oben formatierten URL (ja, es ist proxy() hier und set_proxy() oben); oder Sie rufen credentials() anstelle von proxy() und Sie geben 4 Strings weiter:
    1. HOSTNAME:PORT'
    2. den Realm, wie er vom Webserver vorgegeben wird, aber ich denke, man kann alles eingeben
    3. den Benutzernamen
    4. das Passwort

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X