FileTransfer API を使用して eBay に一括データ交換呼び出しをアップロードしようとしています。これを行うには、xml 要求文字列を eBay サーバーに POST する必要がありますが、xml 要求には<Data>
、転送するデータを含める必要があるセクションが含まれています (この場合は、別の xml ドキュメントを含む base64 でエンコードされた zip ファイルです)。 . eBay は、そのようなドキュメントを作成する方法の C# の例を示しています: https://ebay.custhelp.com/app/answers/detail/a_id/1561
httplib を使用して Python でこの例を再作成して、例とほぼ同じ方法で作成した文字列を POST しようとしました (3 つの UUID は一意です)。
request = """
--MIMEBoundaryurn_uuid_{XMLUUID}
Content-Type: application/xop+xml;charset=UTF-8;type="text/xml;charset=UTF-8";
Content-Transfer-Encoding: binary
Content-ID:<0.urn:uuid:{REQUUID}>
<?xml version="1.0" encoding="utf-8"?>
<uploadFileRequest xmlns:sct=\"http://www.ebay.com/soaframework/common/types\" xmlns="http://www.ebay.com/marketplace/services">
<fileAttachment>
<Size>{Size}</Size>
<Data><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:urn:uuid:{ATTCHMNTUUID}>"</Data>
</fileAttachment>
<fileFormat>{fileFormat}</fileFormat>
<fileReferenceId>{fileReferenceId}</fileReferenceId>
<taskReferenceId>{taskReferenceId}</taskReferenceId>
</uploadFileRequest>
--MIMEBoundaryurn_uuid_{XMLUUID}
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <urn.uuid:{ATTCHMNTUUID}>\r\n
{Data}
--MIMEBoundaryurn_uuid_{XMLUUID}--
""".replace("\t", "")
request_dict = {
'Size': size,
'Data': payload,
'fileFormat': 'zip',
'fileReferenceId': '50000935383',
'taskReferenceId': '50000847753',
'REQUUID': reqUUID,
'XMLUUID': xmlUUID,
'ATTCHMNTUUID': attchmntUUID,
}
request = request.format( **request_dict )
次のようなヘッダーを使用します。
headers = {
'X-EBAY-SOA-OPERATION-NAME': 'uploadFile',
'X-EBAY-SOA-SERVICE-NAME': 'FileTransferService',
'X-EBAY-SOA-SECURITY-TOKEN': #Auth Token,
'Content-type': "multipart/related; boundary=" + boundary + ";type=\"application/xop+xml\";start=\"<0." + "urn:uuid:" + str(requuid) + ">\";start-info=\"text/xml\""
}
そして私の投稿:
connection = httplib.HTTPSConnection( 'storage.sandbox.ebay.com' )
connection.request( "POST", '/FileTransferService', request, headers )
MIME 添付情報なしで xml リクエストを送信すると、ファイルは問題なく受け入れられます。<xop>
しかし、上記のコードのように、MIME マルチパート/関連の添付ファイルと添付ファイル内のデータの場所を示すタグを使用して実行しようとすると、POST が成功せず、「エラー 302: 一時的に移動しました」という応答が返されます。 . これにより、MIME multipart/related xml リクエストの作成方法、「Content-type」ヘッダー宣言の作成方法、xop の使用、または 3 つすべての組み合わせに問題があると思われます。もの。
私の質問は次のとおりだと思います: MIME マルチパート/関連セクションを含み、xop も使用する xml リクエストを作成するにはどうすればよいですか?
助けてくれてありがとう!
ウェス