8

PHP と Python で Web サービスをテストしていました。Web サービスのアドレスは、たとえばhttp://my.domain.com/my/webservice. その URL を使用して PHP で Web サービスをテストしたところ、すべて正常に動作しました。しかし、同じ場所を使用したが、SOAPpy を使用する Python でエラーが発生しました。

以下は、Web サービス (Python) との通信に使用したコードです。

from SOAPpy import WSDL
server = SOAPProxy('http://my.domain.com/my/webservice', namespace)
server.myFunction()

サーバーから得た応答:

HTTPError: <HTTPError 301 Moved Permanently>

Web サービスの場所に末尾のスラッシュを追加すると、機能することがわかりました。

from SOAPpy import WSDL
server = SOAPProxy('http://my.domain.com/my/webservice/', namespace)
server.myFunction()

末尾のスラッシュがないためにエラーが発生するのはなぜですか?

4

5 に答える 5

20

これらは異なる URL です。フォルダー内のファイルをhttp://my.domain.com/my/webservice意味します。my/webservice フォルダー内の既定のドキュメントを意味します。webservicemyhttp://my.domain.com/my/webservice/

多くの Web サーバーはそのような URL を自動的に修正しますが、必須ではありません。

于 2009-07-27T15:46:21.997 に答える
3

実際のサーバー URL は http://my.domain.com/my/webservice/であるためです。

デフォルトでは、PHP ライブラリはリダイレクトに従っている必要があります。

于 2009-07-27T15:45:14.417 に答える
3

エラーは 301 リダイレクトで、Web サーバーによって末尾にスラッシュが付いた URL にリダイレクトされていることを意味します。

PHP はこのリダイレクトに自動的に従うため、エラーをスローしないようですが、Python はスローしません。次のことを行う必要があります。

  1. 初期URLに接続してみる
  2. 301 リダイレクトをキャッチし、場合によっては 302 リダイレクトもキャッチします。
  3. リダイレクトがあった場合は、代わりにその URL に接続してみてください。

新しい URL は、応答ヘッダーで使用できるはずです。

HTH。

于 2009-07-27T15:56:07.640 に答える
2

[免責事項: これは、ここからの私の回答のコピーです。この種のコピーを好まない人がいることは知っていますが、これはスラッシュが重要である理由を説明しています。]

あなたがページを提供していると想像してください

http://mydomain.com/bla

含む

<a href="more.html">Read more...</a>

クリックすると、ユーザーのブラウザはhttp://mydomain.com/more.html. 代わりにあなたが務めていましたか

http://mydomain.com/bla/

(同じ内容で)、ブラウザはhttp://mydomain.com/bla/more.html. このあいまいさを避けるために、URL がディレクトリを指している場合、リダイレクトはスラッシュを追加します。

于 2009-07-27T15:50:33.643 に答える
0

SOAP-URL がどのように見えるかはサーバー次第です。スラッシュが必要かどうかは、サーバーと SOAP 実装によって異なります。

あなたの場合、ターゲット サーバーは apache サーバーであり、SOAP URL は実際には SOAP 処理スクリプトを含むディレクトリであると想定しています。サーバー上のhttp://my.domain.com/my/webserviceにアクセスすると、Apache はディレクトリがhttp://my.domain.com/my/webservice/として適切にアドレス指定されていると判断し、301 リダイレクトを送信します。

SOAPはhttp POSTを使用します。リダイレクトに従うかどうかを決定するのはクライアント次第です。私は、リダイレクトを期待していないだけだと思います。

Java の Apache Axis などの SOAP の他の実装には、サーブレットのように見える URL があります。たとえば、スラッシュなしのhttp://domain.com/soap/webserviceです。

Axis はリダイレクトでも失敗すると思います。

于 2009-07-27T16:01:16.117 に答える