2012-01-19 14 views
7

Linux Slackware 13.0 üzerinde SUDS 0.4'ü python 2.6.2 ile çalıştırıyorum. Bu kodu kullanarak SABUN yöntemini çağırdığınızda:Boş cookiejar kullanarak SUDS

from suds.client import Client 

client = Client(url='file:acctWeb.wsdl', 
       location='http://10.242.69.4:8088/pfmaccess') 

res = client.service.login(login='user',password='passwd') 

Ben cevaben aşağıdaki alırsınız:

DEBUG:suds.transport.http:received: 
CODE: 200 
HEADERS: {'set-cookie': 'OSP_Ref=0000000573800052;Domain=10.242.69.4:8088;Path=/pfmaccess', 'content-length': '26541', 'content-type': 'text/xml; charset=utf-8', 'connection': 'close', 'server': 'Alcatel-Lucent OSP 2.4'} 

ama

>>> client.options.transport.cookiejar 
<cookielib.CookieJar[]> 

mevcut çerez yoktur göstermektedir. Bunun nedeni ne olabilir? SOAP API'sini kullanamıyorum çünkü yanıt çerezinde gönderilen kimlik bilgilerini geçmem gerekiyor.

Lütfen bana yardım edin.

BR

rjan

cevap

6

Tamam, ben onunla biraz etrafına oynadım.

önce, küçük bir test sunucusu (courtesy of soaplib): bazı küçük modifikasyonla

import soaplib 
from soaplib.core.service import rpc, DefinitionBase, soap 
from soaplib.core.model.primitive import String, Integer 
from soaplib.core.server import wsgi 
from soaplib.core.model.clazz import Array 
import sys, pprint 

class HelloWorldService(DefinitionBase): 
    @soap(String,Integer,_returns=Array(String)) 
    def say_hello(self,name,times): 
     results = [] 
     for i in range(0,times): 
      results.append('Hello, %s'%name) 
     return results 

class WsgiApp(wsgi.Application): 

    def on_wsgi_return(self, env, headers, return_str): 
     headers['Set-Cookie'] = 'spam=eggs;domain=127.0.0.1;path=/' 
     print >>sys.stderr, headers 

if __name__=='__main__': 
    try: 
     from wsgiref.simple_server import make_server 
     soap_application = soaplib.core.Application([HelloWorldService], 'tns') 
     wsgi_application = WsgiApp(soap_application) 
     server = make_server('localhost', 7789, wsgi_application) 
     server.serve_forever() 
    except ImportError: 
     print "Error: example server code requires Python >= 2.5" 

bir tanımlama başlığı ayarlamak için kullanılır.

ve köpük-Testclient

:

from suds import client, transport 

c = client.Client("http://127.0.0.1:7789/?wsdl") 
print c.service.say_hello("spam", 1) 
print c.options.transport.cookiejar 

bu üretir çalışan:

(stringArray){ 
    string[] = 
     "Hello, spam", 
} 
<cookielib.CookieJar[<Cookie spam=eggs for .127.0.0.1/>]> 

yüzden o iş yolunmuş. Eğer http://localhost:7789/?wsdl istek url değiştirirseniz ancak alırsınız: ...
(stringArray){ 
    string[] = 
     "Hello, spam", 
} 
<cookielib.CookieJar[]> 

istemcide cookielib bazı oturum açarak

import logging 
import cookielib 
logging.basicConfig() 
logging.getLogger('cookielib').setLevel(logging.DEBUG) 
cookielib.debug = True 

... ve ortaya niçin ortaya koymaktadır:

DEBUG:cookielib:add_cookie_header 
DEBUG:cookielib:extract_cookies: Date: Thu, 17 May 2012 15:56:01 GMT 
Server: WSGIServer/0.1 Python/2.7.3 
Set-Cookie: spam=eggs;domain=127.0.0.1;path=/ 
Content-Length: 822 
Content-Type: text/xml 

DEBUG:cookielib: - checking cookie spam=eggs 
DEBUG:cookielib: effective request-host localhost.local (even with added initial 
        dot) does not end with .127.0.0.1 
(stringArray){ 
    string[] = 
     "Hello, spam", 
} 
<cookielib.CookieJar[]> 

basit bir açıklama: çerez alan isteğin sunucu alanıyla eşleşmesi ve yok ne zaman verifyi herhangi araması yapmaz cookielib göründüğü gibi alan adı. may (

  • emin istemci ve sunucu çalışması için ben localhost.local hem ayarlamak zorunda örnekte
    (domainname veya IP ya) aynı alanı kullanmak olun:

    böylece çözüm biri olacağını hosts dosyasına bağlı ...)

  • otomatik
  • DNS aramalarını Ah

kullanan bir cookiejar uygulamak ve sonra cookieib istek alanı kullanır, gönderilen çerezinden etki alanını kaldırmak son ama en az: etmedi nedeni OP'lerin sorusu:
bağlantı noktası, etki alanının bir parçası değildir, bu nedenle Domain=10.242.69.4:8088 numaralı bir çerez her zaman reddedilecektir.

İlgili konular