Solicitud de Python SUDS SOAP al servicio https 401

Estoy tratando de usar SUDS y estoy atascado tratando de averiguar por qué no puedo hacer que la autenticación funcione (o https).

El servicio al que estoy tratando de acceder está sobre https con autenticación de resumen básica. Según los errores, parece estar usando http en lugar de https. Pero no estoy realmente seguro de lo que me estoy perdiendo. Cualquier pista es apreciada.

from suds.client import Client from suds.transport.http import HttpAuthenticated import logging logging.basicConfig(level=logging.DEBUG) logging.getLogger('suds.client').setLevel(logging.DEBUG) logging.getLogger('suds.transport').setLevel(logging.DEBUG) logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) logging.getLogger('suds.wsdl').setLevel(logging.DEBUG) def main(): url = 'https://blah.com/soap/sp/Services?wsdl' credentials = dict(username='xxxx', password='xxxx') t = HttpAuthenticated(**credentials) client = Client(url, location='https://blah.com/soap/sp/Services', transport=t) print client.last_sent() if __name__=="__main__": main() 

Salida de depuración:

DEBUG: suds.wsdl: leyendo wsdl en: https://blah.com/soap/sp/Services?wsdl … DEBUG: suds.transport.http: opening (https://blah.com/soap/sp/ Servicios? Wsdl)
recorte
Archivo “C: \ Python27 \ Lib \ site-packages \ suds-0.4-py2.7 \ suds \ reader.py”, línea 95, en descarga
fp = self.options.transport.open (Request (url))

Archivo “C: \ Python27 \ Lib \ site-packages \ suds-0.4-py2.7 \ suds \ transport \ http.py”, línea 173, en abierto
volver HttpTransport.open (auto, solicitud)

Archivo “C: \ Python27 \ Lib \ site-packages \ suds-0.4-py2.7 \ suds \ transport \ http.py”, línea 64, abierto
elevar TransportError (str (e), e.code, e.fp)

suds.transport.TransportError: HTTP Error 401: autorización requerida

Suds proporciona dos clases HttpAuthenticated , una en el módulo suds.transport.http y la segunda en el módulo suds.transport.https . Aparece su instancia desde suds.transport.http , sin embargo, dado que su URL es https:// , es posible que desee probar suds.transport.https.HttpAuthenticated .

Me encontré con este problema y encontré una solución que funciona para mí. Mi servidor estaba usando la autenticación NTLM, por lo que para que la suds funcione, simplemente tuve que seguir la sección “Windows (NTLM)” en la documentación .

Primero instale python-ntlm , y luego puede escribir:

 from suds.transport.https import WindowsHttpAuthenticated ntlm = WindowsHttpAuthenticated(username='xx', password='xx') client = Client(url, transport=ntlm)