2

リバースプロキシ/リダイレクトの背後でホストされているWCFサービスにアクセスしようとしています。WCFサービスは、schemaLocation実際にサービスが提供されているマシンに基づいて、間違ったレポートを送信しています。たとえば、次のようなものがあります。

<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://badhost1.com/service.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://badhost1.com/service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
</xsd:schema>
</wsdl:types>

今、それはあるべきではありませんhttp://badhost1.com、それはあるべきですhttp://goodhost.com。グッドホストバージョンをポイントすると、ブラウザでxsdを開くことができます。明らかにバッドホストバージョンは機能しません。

これらの不良エンドポイントを正しいエンドポイントに置き換える方法はありますか?

4

1 に答える 1

2

プラグインを作成できることがわかりました。これは簡単なものです:

import re
from suds.plugin import DocumentPlugin

class FixUrls(DocumentPlugin):
    def loaded(self, context):
        context.document = re.sub(r'badhost\d', 'goodhost', context.document)

そしてそれはlaと呼ばれます:

client = Client(url, plugins=[plugin])

必要なのはそれだけです!

于 2013-02-21T20:21:24.640 に答える