2009-07-27 2 views
7

저는 PHP와 Python으로 웹 서비스를 테스트하고있었습니다. 웹 서비스의 주소는 http://my.domain.com/my/webservice입니다. 그 URL을 사용하여 PHP에서 웹 서비스를 테스트했을 때 모든 것이 잘 동작했습니다. 하지만, 같은 위치를 사용했지만 파이썬에서 SOAPpy를 사용하면 오류가 발생했습니다. 나는를 추가하면 것을 내가 알아웹 서비스의 후행 슬래시가 중요한 이유는 무엇입니까?

HTTPError: <HTTPError 301 Moved Permanently> 

:

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

내가 서버에서받은 응답 : 다음

내가 웹 서비스와 통신하는 데 사용되는 코드 (파이썬)입니다 작동하는 웹 서비스 위치에 후행 슬래시!

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

왜 슬래시가 부족하면 오류가 발생합니까? 실제 서버 URL이기 때문에

답변

19

다른 URL입니다. http://my.domain.com/my/webservicemy 폴더에있는 webservice 파일을 의미합니다. http://my.domain.com/my/webservice/은 my/webservice 폴더 내의 기본 문서를 의미합니다.

많은 웹 서버가 자동으로 이러한 URL을 수정하지만, 그렇게하지 않아도됩니다.

2

[면책 조항 : 이것은 내 대답 from here의 사본입니다. 나는 어떤 사람들은 복사의이 종류를 좋아하지 않는다 알고 있지만 슬래시가 중요한 이유는 설명합니다.]

당신이 클릭에

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

을 포함하는 페이지

http://mydomain.com/bla 

를 제공 상상 , 사용자의 브라우저는 http://mydomain.com/more.html을 검색합니다. 대신 (같은 내용으로)

http://mydomain.com/bla/ 

을 제공했다, 브라우저는 http://mydomain.com/bla/more.html를 검색합니다. 이 모호성을 피하기 위해 URL이 디렉토리를 가리키는 경우 리디렉션은 슬래시를 추가합니다.

3

오류는 301 리디렉션이므로 웹 서버가 끝에 슬래시가있는 URL로 리디렉션됩니다.

PHP는 자동으로이 리디렉션을 따르므로 오류가 발생하지 않는 반면 Python은 그렇지 않습니다. 당신은 다음을 수행해야합니다 초기 URL

  • 캐치 모든 301 리디렉션에 연결하는

    1. 시도를 가능성이 302도 리디렉션
    2. 리디렉션 후 대신 해당 URL에 연결을 시도가 있었다면 .

    응답 헤더에서 새 URL을 사용할 수 있어야합니다.

    HTH.

  • 0

    슬래시가 필요한 경우 서버와 SOAP 구현에 따라 SOAP-URL의 모양이 서버에 달려 있다고 가정합니다.

    귀하의 경우, 대상 서버가 아파치 서버이고 SOAP URL이 실제로 SOAP 처리 스크립트가 들어있는 디렉토리라고 가정합니다. 서버에서 http://my.domain.com/my/webservice에 액세스하면 apache는 디렉토리가 적절하게 주소가 http://my.domain.com/my/webservice/ 인 것으로 결정하고 301 리디렉션을 전송합니다.

    SOAP는 http POST를 사용합니다. 클라이언트가 리디렉션을 따라야하는지 여부를 결정할 때까지 최대 값을 예상합니다.

    SOAP의 다른 구현 예. Java의 Apache Axis에는 서블릿처럼 보이는 URL이 있습니다 (예 : http://domain.com/soap/webservice 슬래시가없는 경우,이 경우 슬래시가없는 URL이 정확합니다. 어쨌든 존재하는 디렉토리가 없습니다.

    축 리디렉션에서도 실패합니다.