Ich habe einen Webservice in PHP und Python getestet. Die Adresse des Webdienstes war, sagen wir, http://my.domain.com/my/webservice
. Als ich den Web Service in PHP mit dieser URL getestet habe, hat alles funktioniert. Aber, als ich den gleichen Ort benutzte, aber in Python mit SOAPpy habe ich einen Fehler bekommen.
Unten ist der Code, den ich verwendet habe, um mit dem Webdienst (Python) zu kommunizieren:
%Vor%Die Antwort, die ich vom Server bekommen habe:
%Vor%Ich finde heraus, dass, wenn ich dem web service location einen Schrägstrich hinzufüge, es funktioniert!
%Vor%Warum verursacht der fehlende Schrägstrich den Fehler?
Sie sind verschiedene URLs. http://my.domain.com/my/webservice
impliziert eine Datei webservice
im Ordner my
. http://my.domain.com/my/webservice/
impliziert das Standarddokument im Ordner "my / webservice".
Viele Webserver korrigieren solche URLs automatisch, müssen dies jedoch nicht tun.
Der Fehler ist eine 301-Weiterleitung, was bedeutet, dass Sie mit dem Schrägstrich am Ende vom Webserver auf die URL umgeleitet werden.
Es scheint, dass PHP dieser Umleitung automatisch folgt und somit den Fehler nicht auslöst, Python dagegen nicht. Sie müssen Folgendes tun:
Die neue URL sollte in den Antwortheadern verfügbar sein.
HTH.
[Haftungsausschluss: Dies ist eine Kopie meiner Antwort von hier . Ich weiß, dass manche Leute diese Art des Kopierens nicht mögen, aber das erklärt, warum der Schrägstrich wichtig ist.]
Stellen Sie sich vor, Sie bedienen eine Seite
%Vor%das enthält
%Vor% Beim Klicken ruft der Browser des Benutzers http://mydomain.com/more.html
auf. Hatten Sie stattdessen serviert
(mit dem gleichen Inhalt), würde der Browser http://mydomain.com/bla/more.html
abrufen. Um diese Mehrdeutigkeit zu vermeiden, hängt die Umleitung einen Schrägstrich an, wenn die URL auf ein Verzeichnis verweist.
Wie eine SOAP-URL aussieht, hängt vom Server ab, ob ein Schrägstrich erforderlich ist, hängt vom Server und der SOAP-Implementierung ab.
In Ihrem Fall gehe ich davon aus, dass der Zielserver ein Apache-Server ist und die SOAP-URL ein Verzeichnis ist, das Ihr SOAP-Skript enthält. Wenn Sie auf dem Server auf Ссылка zugreifen, entscheidet Apache, dass das Verzeichnis ordnungsgemäß adressiert ist als Ссылка und sendet eine 301-Weiterleitung.
SOAP verwendet einen http POST, es ist dem Client überlassen zu entscheiden, ob der Redirect befolgt werden soll oder nicht, ich nehme an, dass er es nicht erwartet.
Andere Implementierungen von SOAP, z.B. Apache Axis in Java haben URLs, die wie Servlets aussehen, z. Ссылка ohne Schrägstrich, in diesem Fall ist die URL ohne Schrägstrich korrekt, es existiert sowieso kein Verzeichnis.
Axis schlägt auch bei Umleitungen fehl, denke ich.