2012-01-19 15 views
7

का उपयोग कर खाली कुकीजर मैं पाइथन 2.6.2 के साथ लिनक्स स्लैकवेयर 13.0 पर एसयूडीएस 0.4 चला रहा हूं। मैं प्रतिक्रिया के बाद प्राप्तएसयूडीएस

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') 

:: जब मैं सोप विधि इस कोड का उपयोग फोन

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'} 

लेकिन

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

से पता चलता कोई कुकीज़ उपलब्ध देखते हैं कि। इसके लिए क्या कारण हो सकता है? मैं SOAP एपीआई का उपयोग करने में सक्षम नहीं हूं क्योंकि मुझे प्रतिक्रिया कुकी में भेजे गए प्रमाण पत्र पास करने की आवश्यकता है।

कृपया इस पर मेरी सहायता करें।

बीआर

rjan

उत्तर

6

ठीक है, मैं इसके साथ एक सा आसपास खेला है।

पहले, एक छोटे से परीक्षण सर्वर (courtesy of soaplib):

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" 
कुछ छोटे संशोधन के साथ

एक कुकी शीर्ष लेख सेट करने के लिए।

और एक झाग-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 

चल रहा यह पैदा करता है:

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

तो यह काम करने के लिए तेजी। लेकिन अगर आप http://localhost:7789/?wsdl करने के लिए अनुरोध यूआरएल बदल आप प्राप्त करेंगे:

(stringArray){ 
    string[] = 
     "Hello, spam", 
} 
<cookielib.CookieJar[]> 

cookielib ग्राहक पर के लिए कुछ लॉगिंग चालू करना ...

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

... और यह पता चलता है का पता चलता है क्यों:

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[]> 

सरल व्याख्या है: कुकी डोमेन अनुरोध के सर्वर डोमेन से मेल नहीं खाता है, और यह cookielib लगता है के रूप में जब verifyi किसी भी देखने नहीं करता है डोमेन और एनजी।

तो समाधान में से एक होगा:

  • यकीन है कि क्लाइंट और सर्वर उदाहरण मैं localhost.local करने के लिए दोनों सेट करने के लिए में (या तो domainname या आईपी) डोमेन का उपयोग
    यह काम करने के लिए बनाने के (मई hosts फ़ाइल पर निर्भर करता है ...)
  • भेजा कुकी से डोमेन निकालें, तब cookieib अनुरोध डोमेन का उपयोग करता स्वचालित रूप से
  • एक cookiejar DNS खोज

का उपयोग करता है ओह लागू है, और अंत में सबसे महत्वपूर्ण: कारण है कि उसने ऐसा नहीं किया ओपीएस प्रश्न में काम:
बंदरगाह डोमेन का हिस्सा नहीं है, इसलिए Domain=10.242.69.4:8088 वाली कुकी को हमेशा अस्वीकार कर दिया जाएगा।