gpt4 book ai didi

python - Suds 忽略代理设置

转载 作者:太空狗 更新时间:2023-10-29 22:01:59 28 4
gpt4 key购买 nike

我正在尝试使用 salesforce-python-toolkit 对 Salesforce API 进行 Web 服务调用,但是我无法让客户端通过代理。由于该工具包基于 suds,我尝试继续使用 suds 本身,看看我是否可以让它遵守那里的代理设置,但它也没有用。

这是在 OS X 10.7(python 2.7)和 ubuntu 12.04 上的 suds 0.3.9 上测试的。

我提出的示例请求最终没有通过代理(只是在本地运行的 burp 或 charles 代理):

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(proxy={'http':'http://localhost:8888'})

suds 不再使用代理了吗?我没有看到它直接列在这里 http://jortel.fedorapeople.org/suds/doc/suds.options.Options-class.html ,但我确实看到它正在运输中。我需要通过传输进行不同的设置吗?当我在 pdb 中单步执行时,它确实看起来像是在使用传输,但我不确定是如何使用的。

谢谢!

最佳答案

我进入了 freenode 上的#suds,Xelnor/rbarrois 提供了一个很好的答案!显然,suds 中的自定义映射覆盖了 urllib2 使用系统配置环境变量的行为。此解决方案现在依赖于相应地设置 http_proxy/https_proxy/no_proxy 环境变量。

我希望这能帮助其他遇到代理和 suds(或其他使用 suds 的库)问题的人。 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())

关于python - Suds 忽略代理设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414600/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com