在客户机上设置useragent\uuuu init\uuuu(Python suds)

在客户机上设置useragent\uuuu init\uuuu(Python suds),python,soap,user-agent,suds,Python,Soap,User Agent,Suds,我想知道如何使用Python中的sud在所有SOAP请求中设置useragent,包括WSDL get。 事实上,根据以下准则: 客户('http://...') WSDL是使用默认的Python用户代理获取的 WSDL在服务器上仅对特定的useragent可用 谢谢你我不知道这是否是最简单的方法,但使用httplib2肯定是可行的(这个技巧还提供了保持活动的连接): 然后需要将传输类传递给suds.client: http = Httplib2Transport() client = Clie

我想知道如何使用Python中的sud在所有SOAP请求中设置useragent,包括WSDL get。 事实上,根据以下准则: 客户('http://...') WSDL是使用默认的Python用户代理获取的

WSDL在服务器上仅对特定的useragent可用


谢谢你

我不知道这是否是最简单的方法,但使用httplib2肯定是可行的(这个技巧还提供了保持活动的连接):

然后需要将传输类传递给suds.client:

http = Httplib2Transport()
client = Client(url,transport=http)
http = HttpTransportCustomUserAgent(user_agent='My custom User Agent')
client = Client(url, transport=http)

您可以覆盖
Transport
类的
u2opener
方法来设置自己的
addheaders
属性:

class HttpTransportCustomUserAgent(HttpTransport):

    def __init__(self, **kwargs):
        self.user_agent = kwargs.get('user_agent', 'Python-urllib/%s' % urllib2.__version__)
        if 'user_agent' in kwargs:
            del(kwargs['user_agent'])
        HttpTransport.__init__(self, **kwargs)

    def u2opener(self):
        """
        Create a urllib opener.
        @return: An opener.
        @rtype: I{OpenerDirector}
        """
        if self.urlopener is None:
            result = urllib2.build_opener(*self.u2handlers())
            result.addheaders = [('User-agent', self.user_agent)]
            return result
        else:
            return self.urlopener
现在,您可以将此新的transporter类用于suds.client:

http = Httplib2Transport()
client = Client(url,transport=http)
http = HttpTransportCustomUserAgent(user_agent='My custom User Agent')
client = Client(url, transport=http)
很好,这使我能够“修复”服务器端
保持活动状态,并且可能无法使用此属性设置关闭。
尝试使用基本suds客户端进行查询时出现问题。