Ok, tôi đã chơi xung quanh một chút với nó.
đầu tiên, một máy chủ ít thử nghiệm (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"
với một số thay đổi nhỏ để thiết lập một tiêu đề cookie.
và bọt-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
chạy này sản xuất:
(stringArray){
string[] =
"Hello, spam",
}
<cookielib.CookieJar[<Cookie spam=eggs for .127.0.0.1/>]>
nên nó seams để làm việc. nhưng nếu bạn thay đổi địa chỉ yêu cầu để http://localhost:7789/?wsdl
bạn sẽ nhận được:
(stringArray){
string[] =
"Hello, spam",
}
<cookielib.CookieJar[]>
bật một số khai thác gỗ cho cookielib
tại client ...
import logging
import cookielib
logging.basicConfig()
logging.getLogger('cookielib').setLevel(logging.DEBUG)
cookielib.debug = True
... và nó cho thấy tiết lộ lý do tại sao:
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[]>
giải thích đơn giản là: tên miền cookie không khớp với miền máy chủ của yêu cầu và dường như cookielib
không thực hiện bất kỳ tra cứu nào khi verifyi ng miền.
vì vậy giải pháp sẽ là một trong số:
- đảm bảo client và server sử dụng cùng một tên miền (hoặc domainname hoặc IP)
trong ví dụ tôi phải đặt cả để localhost.local
để làm cho nó làm việc (có thể phụ thuộc vào tệp hosts
...)
- loại bỏ tên miền từ các tập tin cookie được gửi đi, sau đó
cookieib
sử dụng lĩnh vực yêu cầu tự động
- thực hiện một cookiejar sử dụng tra cứu DNS
Oh, và cuối cùng nhưng không kém phần quan: lý do tại sao nó không làm việc trong câu hỏi OPs:
cổng không phải là một phần của miền, do đó một cookie với Domain=10.242.69.4:8088
sẽ luôn bị từ chối.