(원격) 메서드를 호출하고 첨부 파일을 다운로드 할 때 zeep을 성공적으로 사용했습니다.python zeep을 사용하여 SOAP을 통해 파일을 업로드하는 방법
나는 파일을 업로드해야하는 방법을 발견하게되었습니다. 파일을 첨부 파일로 전달해야합니다. 다음과 같이 내가 일반적으로 원격 웹 서비스 메소드를 호출
client.service.fooMethod 내 특정 경우 (ARG1, 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의 호출을 파이썬에서 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이고 열린 우리당 인수는 문자열 cid:<someContentID>
을 포함 할 필요가있다.
SoapUI (https://www.soapui.org/downloads/soapui.html)를 사용하면 문제없이 함수를 호출 할 수 있습니다. 다음은 원시 데이터 (일부 생략 된) SoapUI 의해 생성되고 서버에 전송
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)이 있으면 어떤 글에도 [comment] (http://stackoverflow.com/help/privileges/comment) 할 수 있습니다. 또한 이것을 확인하십시오. [대신 할 수있는 방법] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reference-to-comment-what-can-i-do-instead). – thewaywewere