Programing

Python SOAP 클라이언트-SUDS 또는 다른 것을 사용합니까?

lottogame 2020. 12. 2. 07:45
반응형

Python SOAP 클라이언트-SUDS 또는 다른 것을 사용합니까?


현재 기존의 광범위한 SOAP 관리 API를 사용할 클라이언트를 구현하는 방법을 찾고 있습니다.

pysimplesoapSUDS같은 다른 SOAP 구현을 살펴 보았습니다 . 첫 번째는 너무 많은 재귀로 인해 WSDL을 구문 분석하는 데 문제가 있었지만 suds는 잘 작동했지만 (느리게) 모듈을 정말 좋아합니다.

그러나 SUDS에는 높은 메모리 소비, WSDL 구문 분석 속도 및 일부 WSDL 속성 (예 : 선택 속성)에 대한 지원 누락과 같은 몇 가지 문제가있는 것 같습니다.
버그보고 및 패치를 적극적으로 수행하는 사람들이 많이 있지만 2010-09-15 0.4 이후 SUDS 릴리스없습니다 . 또한 위키와 로드맵은 약간 무시 된 것처럼 보입니다.

저에게는 SUDS가 더 이상 유지되지 않는 것처럼 보입니다.

그래서 여기 내 질문 :

  1. 비누 클라이언트로서 비눗물에 더 큰 프로젝트를 기반으로하는 것이 합리적입니까?
  2. 티켓팅 시스템에서 사용 가능한 일부 패치를 이미 구현 한 비눗물 포크가 있습니까?
  3. 메모리 풋 프린트가 적고 사용하기 쉽고 복잡한 대형 WSDL 파일을 처리 할 수있는 사용 가능한 대안

[2013 년 11 월 업데이트]

2 년 이상이 지났고 원래의 비눗물 프로젝트는 정말 죽었습니다. 2010 년 이후로 더 이상 릴리스가 없습니다.이 사실로 인해 많은 사람들이 suds를 포크하기 시작했으며 Debian과 같은 배포판은 일부 문제를 해결하기 위해 원래 suds 패키지의 패치 버전을 배포하고 있습니다.

성공적으로 사용한 Jurko의 적극적인 유지 관리 포크를 추천 할 수 있습니다. 파이썬 3을 지원하고 많은 suds의 알려진 문제를 해결합니다. 릴리스 노트 및 버그 추적기는 Bitbucket 에서 사용할 수 있으며 패키지는 PyPI 에서도 사용할 수 있으므로 pip를 사용하여 설치할 수 있습니다.


인증 된 표준은 없지만 SOAP를 사용해야한다면 Suds가 최선의 선택입니다. Suds는 큰 WSDL에서 느릴 수 있으며, 이것이 그들이 작업하고있는 것입니다.

그 동안 WSDL이 자주 변경되지 않을 것으로 예상되는 경우 속도를 크게 높일 수있는 두 가지 옵션이 있습니다.

  1. WSDL을 localhost에 다운로드
  2. 캐싱 사용

WSDL 다운로드

큰 WSDL의 경우 문제의 일부는 먼저 매번 WSDL을 다운로드해야하므로 오버 헤드가 추가 될 수 있습니다. Suds는 시작시 전체 WSDL을 다운로드하고 구문 분석하여 변경되지 않았는지 확인하는 데 시간이 걸립니다.

로컬 시스템에 다운로드 한 다음 URL Clientfile://스키마를 사용 하여 생성자에 전달할 수 있는 경우. Suds가 urllib2HTTP 전송을 사용 하기 때문에 이것은 완벽하게 합법적입니다.

이제 WSDL URL에 호스트 이름을 제공하지 않기 때문에 locationSOAP 애플리케이션의 실제 URL을 지정 하는 인수 도 전달해야합니다 .

다음은 예입니다.

from suds.client import Client

# The service URL
soap_url = 'http://myapp.example.notreal/path/to/soap'

# The WSDL URL, we wont' use this but just illustrating for example. This 
# would be the file you download to your system and save as wsdl_file
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl' 

# The full path to the downloaded WSDL file on your local system
wsdl_file = '/path/to/myapp.wsdl'
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url

client = Client(url=wsdl_url, location=soap_url)

관심이 있으시면이 접근 방식을 제 작업에 사용했으며 코드를 오픈 소스했습니다 .

WSDL 캐싱

다른 옵션은 Suds의 뛰어난 캐싱 기능을 사용하는 것 입니다. 명시 적으로 캐시 개체를 만든 다음 cache인수를 사용하여 생성자에 전달해야합니다 . 그렇지 않으면 기본적으로 ObjectCache1 일의 기간이 있습니다.

이러한 접근 방식을 모두 사용할 수도 있습니다.


zeep 이라는 새롭고 잘 유지되는 SOAP 클라이언트가 있습니다. Python 2와 3을 모두 지원하며 잘 알려진 lxml 및 요청 라이브러리를 기반으로합니다.


흥미로운 최신 게시물은 여기에서 찾을 수 있습니다. Python 용으로 존재하는 SOAP 클라이언트 라이브러리는 무엇이며 해당 문서는 어디에 있습니까? 불행히도, 당신이 찾고있는 완벽한 SOAP 라이브러리는 (아직) 존재하지 않는 것 같습니다.


2013 년입니다. 이것은 저와 같이 Python 및 SOAP에서 문제를 겪은 모든 사람을위한 업데이트입니다.

파이썬에서 SOAP를 사용하려고했습니다. 비눗물을 사용해 보았지만 슬프게도 라이브러리는 2010 년 이후로 업데이트되지 않았습니다. 내 코드의 첫 번째 테스트 실행에서 다음 오류가 발생했습니다.

RuntimeError: maximum recursion depth exceeded while calling a Python object

suds가 HTTPS 연결에 대한 재귀 참조와 관련된 문제로 판명되었습니다. drfence의 답변을 참조하십시오 . 이 문제를 해결하기 위해 수동으로 비눗물을 패치해야했습니다.

대신 PHP로 전환했습니다. 파이썬만큼 간단하지는 않지만 작동시킬 수있었습니다.

참고 URL : https://stackoverflow.com/questions/7739613/python-soap-client-use-suds-or-something-else

반응형