2010-03-10 3 views
6

비누로 파이썬으로 작업하려면 라이브러리에 알려주십시오.
지금, 나는 "비눗물"를 사용하기 위해 노력하고있어 나는 서버 응답에서
코드 예제 방법 GET HTTP 헤더를 알아 보았 할 수 없습니다SOAP, Python, suds

from suds.client import Client 
url = "http://10.1.0.36/money_trans/api3.wsdl" 
client = Client(url) 
login_res = client.service.Login("login", "password") 

변수 "login_res을"XML 응답 및 나던를 포함 포함 HTTP 헤더 . 하지만 그들로부터 세션 ID를 얻어야합니다.

+0

당신은 SOAP을위한 파이썬 라이브러리에 대한 일반적인 조언을 묻는하거나 비눗물의 특정 측면에 도움을 요청하고 있습니다 : 여기

은 슈퍼 오버 단순화 된 예입니다? 구체적인 질문을 시도하십시오. –

답변

4

실제로 쿠키 자루를보고 싶다고 생각합니다.

client = Client(url) 
login_res = client.service.Login("login", "password") 
for c in client.options.transport.cookiejar: 
    if "sess" in str(c).lower(): 
     print "Session cookie:", c 

잘 모르겠습니다. 나는 아직도 SUDS 멍청 아, 나 자신이야. 그러나 이것은 내 직감이 말하는 것입니다.

+0

+1 이것이 올바른 길에 있기 때문에, urllib2 (Suds가 기본적으로 사용하는 오프너)가 쿠키와 잘 어울린다고 가정합니다. 경로에 302 리디렉션이 있으면 urllib2 + 302가 + 쿠키를 + 리디렉션하기 때문에 모든 베팅이 해제됩니다. – jathanism

4

Ishpeck의 응답은 올바른 경로에 있습니다. Suds 내부에 대해 몇 가지 추가하고 싶었습니다.

suds 클라이언트는 urllib2 HTTP 오프너 위에 큰 뚱뚱한 추상화 계층입니다. HTTP 클라이언트, cookiejar, 헤더, 요청 및 응답은 모두 transport 객체에 저장됩니다. 문제는이 활동 중 어느 것도 캐시 안의 쿠키가 아닌 전송의 내부에 캐시되거나 저장되지 않으며 때로는 이러한 활동을 추적하는 것조차 때로는 문제가 될 수 있다는 것입니다. 당신이 때 디버깅에 무슨 일이 일어나고 있는지보고 싶다면

, 내 제안이 코드에 이것을 추가하는 것입니다 : 디버그 로깅을 설정하여

import logging 
logging.basicConfig(level=logging.INFO) 
logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG) 

Suds makes use of the native logging module 그래서, 당신은 모든 활동을 볼 수 헤더, 변수, 페이로드, URL 등을 포함하여 아래에서 수행됩니다. 이로 인해 시간이 많이 절약되었습니다.

외부에서 헤더의 상태를 확실하게 추적해야하는 경우 suds.transport.http.HttpTransport 개체의 사용자 지정 하위 클래스를 만들고 기본 동작 중 일부를 오버로드 한 다음이를 Client 생성자로 전달해야합니다. .

from suds.transport.http import HttpTransport, Reply, TransportError 
from suds.client import Client 

class MyTransport(HttpTransport): 
    # custom stuff done here 

mytransport_instance = MyTransport() 
myclient = Client(url, transport=mytransport_instance) 
관련 문제