我试图用销售人员的Python的工具包,使Web服务调用Salesforce的API,但是我遇到了麻烦客户端通过代理。 由于该工具包是基于泡沫的顶端,我试着下到只使用泡沫本身,看看我是否能得到它尊重代理设置存在,但它也不能工作。
这是对在两个OS X 10.7(蟒2.7)和Ubuntu 12.04泡沫0.3.9测试。
一个例子请求我做了最终没有通过代理(只打饱嗝或查尔斯代理本地运行):
import suds
ws = suds.client.Client('file://sandbox.xml',proxy={'http':'http://localhost:8888'})
ws.service.login('user','pass')
我已经试过各种事物与代理 - 滴HTTP://,使用IP,使用FQDN。 我已经通过在PDB代码台阶,看看它是设置代理选项。 我也尝试实例化客户端没有代理,然后用它设置:ws.set_options(代理= {“HTTP”:“HTTP://本地主机:8888”})
不使用肥皂水代理下去? 我没有看到它直接在这里上市http://jortel.fedorapeople.org/suds/doc/suds.options.Options-class.html ,但我看到它正在传送。 我需要通过传输不同的设置呢? 当我在PDB台阶的贯通它没有看起来就像是用交通工具,但我不知道怎么样。
谢谢!
我走进#suds freenode上和Xelnor / rbarrois提供了一个很好的答案! 显然,在泡沫的自定义映射覆盖的urllib2的使用系统配置环境变量的行为。 该解决方案现在依赖于具有相应地设置HTTP_PROXY / https_proxy / NO_PROXY环境变量。
我希望这可以帮助别人运行到与代理和肥皂水(或用肥皂水其他库)的问题。 https://gist.github.com/3721801
from suds.transport.http import HttpTransport as SudsHttpTransport
class WellBehavedHttpTransport(SudsHttpTransport):
"""HttpTransport which properly obeys the ``*_proxy`` environment variables."""
def u2handlers(self):
"""Return a list of specific handlers to add.
The urllib2 logic regarding ``build_opener(*handlers)`` is:
- It has a list of default handlers to use
- If a subclass or an instance of one of those default handlers is given
in ``*handlers``, it overrides the default one.
Suds uses a custom {'protocol': 'proxy'} mapping in self.proxy, and adds
a ProxyHandler(self.proxy) to that list of handlers.
This overrides the default behaviour of urllib2, which would otherwise
use the system configuration (environment variables on Linux, System
Configuration on Mac OS, ...) to determine which proxies to use for
the current protocol, and when not to use a proxy (no_proxy).
Thus, passing an empty list will use the default ProxyHandler which
behaves correctly.
"""
return []
client = suds.client.Client(my_wsdl, transport=WellBehavedHttpTransport())
我想你可以通过使用urllib2的揭幕战象下面这样做。
import suds
t = suds.transport.http.HttpTransport()
proxy = urllib2.ProxyHandler({'http': 'http://localhost:8888'})
opener = urllib2.build_opener(proxy)
t.urlopener = opener
ws = suds.client.Client('file://sandbox.xml', transport=t)
实际上,我是能够得到它做两件事情的工作:
- 确保有在代理字典钥匙
http
和https
。 - 设置使用代理
set_options
建立客户端了。
所以,我的相关代码如下所示:
self.suds_client = suds.client.Client(wsdl) self.suds_client.set_options(proxy={'http': 'http://localhost:8888', 'https': 'http://localhost:8888'})
我用肥皂水,即使我的代理已配置正确我无法连接到端点的wsdl有多个问题。 花显著时间试图制定一个解决方法后,我决定给soap2py一个镜头- https://code.google.com/p/pysimplesoap/wiki/SoapClient
连续工作了蝙蝠。