首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python API - UploadSiteHostedPictures - eBay

Python API - UploadSiteHostedPictures - eBay
EN

Stack Overflow用户
提问于 2019-11-06 11:04:15
回答 1查看 253关注 0票数 0

我在尝试用Python将图片上传到Ebay时遇到了问题。我从来没有通过VBA在Excel中列出项目的问题超过6年,遵循官方的易趣PHP示例,但不能让它在Python中工作。

我一直收到“图片服务仅支持上传JPEG、GIF、PNG、BMP和TIFF图像格式。请使用以这些格式之一保存的图片版本重试。”尽管图像是一个jpg格式,并且可以通过我的VBA方法上传。

我看了一遍又一遍,调整了3天的请求,但都没有用。我打赌这是很简单的东西,所以我希望有人能指出我的错误,或者提供一个完整的工作示例。

更改版本不会有什么不同,571仍然适用于VBA实现。

我没有问题,使一个小贝宝捐赠的人谁可以帮助我在这方面的工作。

提前谢谢。

代码语言:javascript
复制
with open(r"H:\temp\earth.jpg", "rb") as image_file:
    encoded_string = (base64.encodebytes(image_file.read())).decode("utf-8")

mimeBoundary = 'MIME_boundary'

ebayAuthToken = '<token>'

requestHeaders = {
    'X-EBAY-API-COMPATIBILITY-LEVEL': '1113',
    'X-EBAY-API-SITEID': '15',
    'X-EBAY-API-DEV-NAME': '<devName>',
    'X-EBAY-API-APP-NAME': '<appName>',
    'X-EBAY-API-CERT-NAME': '<certName>',
    'X-EBAY-API-CALL-NAME': 'UploadSiteHostedPictures',
    'Content-Type': 'multipart/form-data; boundary=' + mimeBoundary
}

xmlRequest = (
    '<?xml version="1.0" encoding="utf-8"?>'
    '<UploadSiteHostedPicturesRequest xmlns="urn:ebay:apis:eBLBaseComponents">'
    '<RequesterCredentials>'
    f'<eBayAuthToken>{ebayAuthToken}</eBayAuthToken>'
    '</RequesterCredentials>'
    '<PictureSet>Supersize</PictureSet>'
    '<Version>517</Version>>'
    '</UploadSiteHostedPicturesRequest>'
)

firstPart = ''
firstPart += '--' + mimeBoundary + '\r\n'
firstPart += 'Content-Disposition: form-data; name=""XML Payload"' + '\r\n'
firstPart += 'Content-Type: text/xml;charset=utf-8' + '\r\n\r\n'
firstPart += f'{xmlRequest}'
firstPart += '\r\n\r\n'

secondPart += '--' + mimeBoundary + '\r\n'
secondPart += 'Content-Disposition: form-data; name=""dummy""; filename=""dummy"' + '\r\n'
secondPart += 'Content-Transfer-Encoding: binary' + '\r\n'
secondPart += 'Content-Type: application/octet-stream' + '\r\n\r\n'
secondPart += f'{encoded_string}' # image binary data
secondPart += '\r\n'
secondPart += '--' + mimeBoundary + '--' + '\r\n'

fullRequest = firstPart + secondPart

uploadImageResponse = requests.post('https://api.ebay.com/ws/api.dll', data=fullRequest, headers=requestHeaders, verify=False)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 05:01:58

我为将来遇到这个问题的任何人找到了解决方案。请求部分需要通过将每个部分编码为字节来连接。如下所示:

代码语言:javascript
复制
        tmpfile = 'H:/temp/%s.bin' % random.randint(0, 100000)
        f = open(tmpfile, 'wb')
        f.write(firstPart.encode())
        f.write(secondPart.encode())
        f.write(base64.b64decode(encoded_string))
        f.write(CRLF.encode())
        f.write(("--" + mimeBoundary + "--" + CRLF).encode())
        f.close()
        # read back what we wrote to the file
        f = open(tmpfile, 'rb')
        fullRequest = f.read()
        f.close()

请注意,您不需要将它们写入和读取到文件中,这就是我找到的解决方案所做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58722504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档