(リモート)メソッドを呼び出して添付ファイルをダウンロードするときにzeepの使用に成功しました。python zeepを使用して添付ファイルとしてSOAP経由でファイルをアップロードする方法
私はファイルをアップロードする必要がある方法を見つけました。ファイルは添付ファイルとして渡す必要があります。次のように私は、通常、リモートWebサービスメソッドを呼び出します。
client.service.fooMethod私の特定のケースでは(引数1、ARG2を、...)
を、arg1にはURI、私がアップロードしたいファイルがありますサーバー。添付ファイルとしてアップロードする必要があります。 これについてはどうすればいいですか?ここで
は、より具体的な例である:
は、メソッド名はUploadPortfoliosで、次のスキーマを持っています
<xs:element name="UploadPortfolio">
<xs:complexType>
<xs:sequence>
<xs:element ref="tns:URI"/>
<xs:element ref="tns:PortfolioID"/>
<xs:element ref="tns:AsOfDate"/>
<xs:element minOccurs="0" ref="tns:SuppressPositionLog"/>
<xs:element minOccurs="0" ref="tns:PositionDetailLogAsAttachment"/>
<xs:element minOccurs="0" ref="tns:UploadSharedPortfolio"/>
</xs:sequence>
</xs:complexType>
</xs:element>
私がUploadPortfoliosを呼び出すためにpythonでZEEPを使用しています。 、どういうわけか私は添付ファイルで送信する必要があるため
portfolio_management_wsdl = 'https://ondemand.uat.riskmetrics.com/ondemand/soap/PortfolioManagement?wsdl'
client_pfm = Client(portfolio_management_wsdl, transport=transport, wsse=wsse)
uri = r'cid://SomeDataFile.xml'
args = {'URI':uri, 'AsOfDate':'20160129'}
result = client_pfm.service.UploadPortfolios(**args)
言うまでもないが、上記の文句を言わない仕事を言う、:<someContentID>
は、添付ファイルのコンテンツIDがどこにあるのuri引数は文字列cid:<someContentID>
を含める必要があります。
SoapUI(https://www.soapui.org/downloads/soapui.html)を使用すると、問題なく機能を呼び出すことができます。以下は、
POST https://ondemand.uat.riskmetrics.com/ondemand/soap/PortfolioManagement.PortfolioManagementHttp sSoap12Endpoint/ HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: multipart/related; type="application/xop+xml"; start="<[email protected]>"; start-info="application/soap+xml"; action="urn:RiskMetricsWS:1.0:PortfolioManagement:UploadPortfolio"; boundary="----=_Part_46_453204030.1495210657807"
MIME-Version: 1.0
Content-Length: 7668
Host: ondemand.uat.riskmetrics.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
------=_Part_46_453204030.1495210657807
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; action="UploadPortfolio"
Content-Transfer-Encoding: 8bit
Content-ID: <[email protected]>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsdl="http://..." xmlns:xsd="http://..." xmlns:xsd1="http://...">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" ... </soap:Header>
<soap:Body>
<wsdl:UploadPortfolio>
<wsdl:URI><inc:Include href="cid:530345234005" xmlns:inc="http://www.w3.org/2004/08/xop/include"/></wsdl:URI>
<wsdl:PortfolioID>TestPtf_RML4</wsdl:PortfolioID>
<wsdl:AsOfDate>20170509</wsdl:AsOfDate>
<wsdl:SuppressPositionLog>false</wsdl:SuppressPositionLog>
<wsdl:PositionDetailLogAsAttachment>true</wsdl:PositionDetailLogAsAttachment>
<wsdl:UploadSharedPortfolio>true</wsdl:UploadSharedPortfolio>
</wsdl:UploadPortfolio>
</soap:Body>
</soap:Envelope>
------=_Part_46_453204030.1495210657807
Content-Type: text/xml; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-ID: <530345234005>
Content-Disposition: attachment; name="SomeDataFile.xml"
<someInformation>
...
</someInformation>
------=_Part_46_453204030.1495210657807--
これは質問への答えを提供していない(と思います)。十分な[評判](http://stackoverflow.com/help/whats-reputation)があれば、どの投稿でも[コメント](http://stackoverflow.com/help/privileges/comment)できるようになります。また、これを確認してください(代わりに何ができますか?)(https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reationation-to-comment-what-can-i-do-instead )。 – thewaywewere