Spyne, Django изменяют WSDL url
Я использую django за обратным прокси-сервером nginx, и django видит url сервера, отличный от того, на котором он на самом деле размещен, например:
Django: http://webserver.com
Nginx: https://webserver.com
Когда я пытаюсь добавить WSDL в SoapUI, он автоматически устанавливает по умолчанию первый сервер http://webserver.com, а затем все запросы не работают. Я пробовал использовать приведенный ниже код, но он не сработал:
...
app = Application(
[EXTWS],
tns='soap.views',
in_protocol=Soap11(validator='soft'),
out_protocol=Soap11(),
)
app.transport = "no_transport_at_all"
...
wsdl = Wsdl11(app.interface)
if os.environ.get("DEBUG"):
wsdl.build_interface_document('http://localhost:8000/wsdl/')
else:
url = f'https://{settings.DOMAIN}/wsdl/'
wsdl.build_interface_document(url)
РЕДАКТИРОВАНИЕ:
Похоже, что код выше достигает некоторых вещей, но результирующий WSDL документ при обращении к нему в браузере все тот же, возможно, он генерируется по запросу; в документации сказано "... Spyne получит URL из первого запроса, построит wsdl на лету и кэширует его как строку в памяти для последующих запросов.", но здесь он генерируется вручную, поэтому он не должен генерировать новый, возможно? Или он генерирует его по запросу, потому что это django, а не wsgi.
Временно, я добился изменения url на то, что я хочу, в основном обезьяньим патчем двух классов следующим образом:
Это какое-то неприемлемое решение, поэтому я буду ждать логической реализации такого поведения. До тех пор я буду использовать это.
