2009-06-30 1 views
0

SOAPpy를 클라이언트로 사용하여 SOAP 요청을 보내려고합니다. SOAPpy.HTTPTransport를 확장하여 쿠키를 추가하는 방법을 설명하는 문서를 찾았지만 제대로 작동하지 않는 것 같습니다. SOAPpy 요청에 쿠키 추가

나는 예 here, 하지만 415 오류를 던지기 시작하는 요청을 보내려고 서버를 사용하려고, 그래서 나는, 또는 서버가 이유를 파악하여 ClientCookie가를 사용하지 않고 이러한 목표를 달성하기 위해 노력하고있어 내가 그것을 사용할 때 415 's를 던지기. 나는 ClientCookie가 사용 때문에 그것이 생각되는 urllib2가 & HTTP/1.1, SOAPpy는 URLLIB를 사용하는 반면 & HTTP/1.0

사람은 심지어 문제, 또는 추가하는 방법의 경우, ClientCookie가 사용 HTTP/1.0을 만드는 방법을 알고 있나요 ClientCookie를 사용하지 않고 SOAPpy 헤더에 쿠키? 다른 서비스를 사용하여이 코드를 시도한 경우 Microsoft 서버에 요청을 보낼 때 오류가 발생하는 것으로 보입니다.

저는 여전히 파이썬으로 내 발걸음을 찾고 있습니다. 그래서 나는 바보 같은 일을 할 수 있습니다.

import sys, os, string 
from SOAPpy import WSDL,HTTPTransport,Config,SOAPAddress,Types 
import ClientCookie 

Config.cookieJar = ClientCookie.MozillaCookieJar() 

class CookieTransport(HTTPTransport): 
    def call(self, addr, data, namespace, soapaction = None, encoding = None, 
    http_proxy = None, config = Config): 

    if not isinstance(addr, SOAPAddress): 
     addr = SOAPAddress(addr, config) 

    cookie_cutter = ClientCookie.HTTPCookieProcessor(config.cookieJar) 
    hh = ClientCookie.HTTPHandler() 
    hh.set_http_debuglevel(1) 

    # TODO proxy support 
    opener = ClientCookie.build_opener(cookie_cutter, hh) 

    t = 'text/xml'; 
    if encoding != None: 
     t += '; charset="%s"' % encoding 
    opener.addheaders = [("Content-Type", t), 
      ("Cookie", "Username=foobar"), # ClientCookie should handle 
      ("SOAPAction" , "%s" % (soapaction))] 

    response = opener.open(addr.proto + "://" + addr.host + addr.path, data) 
    data = response.read() 

    # get the new namespace 
    if namespace is None: 
     new_ns = None 
    else: 
     new_ns = self.getNS(namespace, data) 

    print '\n' * 4 , '-'*50 
    # return response payload 
    return data, new_ns 


url = 'http://www.authorstream.com/Services/Test.asmx?WSDL' 
proxy = WSDL.Proxy(url, transport=CookieTransport) 
print proxy.GetList() 
+0

I를 호출 이걸 알아 냈을 수도 있습니다. 뭔가를 시도해 보았습니다. – supersighs

답변

0

오류 415는 잘못된 콘텐츠 형식 헤더 때문입니다.

firefox 또는 어떤 도구 (wireshark, Charles 또는 Fiddler)에 대해 httpfox를 설치하여 어떤 헤더를 보내고 있는지 추적하십시오. Content-Type을 시도하십시오 : application/xml.

... 
t = 'application/xml'; 
if encoding != None: 
    t += '; charset="%s"' % encoding 
... 

당신은 웹 서버를 사용 콘텐츠 형식에 파일을 보내려고하는 경우 : 응용 프로그램/x-www-form-urlencoded를 SOAPpy와 함께 쿠키를 사용하는

+0

그 이후로 문제가 정확히 발견되었습니다. 문제를 해결하는 데 어려움이 있습니다. 위의 코드에서 설정하려고 시도하고 있지만 취하지는 않습니다. – supersighs