Python 使用肥皂水清空cookiejar

Python 使用肥皂水清空cookiejar,python,linux,soap,suds,cookiejar,Python,Linux,Soap,Suds,Cookiejar,我在Linux Slackware 13.0和python 2.6.2上运行SUDS 0.4。当我使用以下代码调用SOAP方法时: 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

我在Linux Slackware 13.0和python 2.6.2上运行SUDS 0.4。当我使用以下代码调用SOAP方法时:

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
显示没有可用的cookie。这可能是什么原因?我无法使用SOAP API,因为我需要传递响应cookie中发送的凭据

请帮我做这个


rjan

好的,我已经玩了一会儿了

首先,一个小测试服务器():

只需稍加修改即可设置cookie头

和一个suds测试客户端:

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/>]>
在客户端为
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[]>
DEBUG:cookielib:add\u cookie\u头
调试:cookielib:extract_cookies:日期:2012年5月17日星期四15:56:01 GMT
服务器:WSGIServer/0.1 Python/2.7.3
设置Cookie:spam=鸡蛋;域=127.0.0.1;路径=/
内容长度:822
内容类型:text/xml
调试:cookielib:-检查cookie垃圾邮件=鸡蛋
调试:cookielib:有效请求主机localhost.local(即使添加了初始
点)不以.127.0.0.1结尾
(字符串数组){
字符串[]=
“你好,垃圾邮件”,
}
简单的解释是:cookie域与请求的服务器域不匹配,而且在验证域时,
cookielib
似乎不进行任何查找

因此,解决方案是:

  • 确保客户端和服务器使用相同的域(域名或IP)
    在示例中,我必须将两者都设置为
    localhost.local
    ,以使其工作(可能取决于
    主机
    文件…)
  • 从发送的cookie中删除域,然后
    cookieib
    自动使用请求域
  • 实现一个使用DNS查找的cookiejar
哦,最后但并非最不重要的一点是:在老年退休金问题上它不起作用的原因:
端口不是域的一部分,因此域=10.242.69.4:8088的cookie将始终被拒绝

(stringArray){
   string[] = 
      "Hello, spam",
 }
<cookielib.CookieJar[]>
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[]>