在客户机上设置useragent\uuuu init\uuuu(Python suds)
我想知道如何使用Python中的sud在所有SOAP请求中设置useragent,包括WSDL get。 事实上,根据以下准则: 客户('http://...') WSDL是使用默认的Python用户代理获取的 WSDL在服务器上仅对特定的useragent可用在客户机上设置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
谢谢你我不知道这是否是最简单的方法,但使用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客户端进行查询时出现问题。