python zeep和MessagePack附件

时间:2018-11-28 02:07:50

标签: python zeep

这里是python新秀,感谢您抽出宝贵时间来提供帮助。

我正在发送SOAP请求,以使用zeep从服务器下载一些mp4录音。服务器通过发送以下MessagePack附件进行响应。如何解压缩并转换为mp4。多部分附件同时包含文件的说明和实际的MP4文件本身。谢谢

<MessagePack(attachments=[<Attachment('<6X3ER09X000X401BEFX91B4FFBD48906>', 'application/octet-stream')>, <Attachment('<0XECXX28CX0RS9DD28BYYA9F2CBA177D>', 'application/octet-stream')>])>

这是我要使用的代码

def get_record(client, siteid, username, passwd, ticket):
    return client.downloadNBRStorageFile(**{'siteId': 'xxxxx', 'recordId': xxxxx, 'ticket':ticket})

def main():

client = Client(wsdl=wsdl)
service = client.create_service(BINDING_NAME, ADDRESS)
resp = update_phone_by_name(service, siteid, username, password, ticket)
pack = client.service.downloadNBRStorageFile
recording = pack.root
description = pack.attachments[0].content
rec_file = pack.attachments[1].content

运行此命令时出现此错误 “记录= pack.root AttributeError:'OperationProxy'对象没有属性'root'“

我试图做与此文章相同的操作,但是无法弄清楚如何下载附件

Python SOAP WSDL works in SOAPpy but not ZSI or zeep

----编辑-----更新----- 我已经更新了如下代码:

def get_ticket(client):
    global rec_ticket
    global ticket
    rec_ticket = client.getStorageAccessTicket(**{'siteId': siteid, 'username': username, 'password': password})
    return rec_ticket

def get_record(client):
    return client.downloadNBRStorageFile(**{'siteId': 'xxxxx', 'recordId': 

recordid,'ticket':rec_ticket})

def main():
    client = Client(wsdl=wsdl)
    axl = client.create_service(BINDING_NAME, ADDRESS)
    resp_ticket = get_ticket(axl)
    resp_rec = get_record(axl)
    pack = client.service.downloadNBRStorageFile(siteid, recordID, rec_ticket)

    record_details = pack.root
    record_file = pack.attachments[1].content

但是我得到以下答复: “提高ConnectionError(例如,request = request) requests.exceptions.ConnectionError:HTTPConnectionPool(host = '10 .224.91.216',port = 2001):url超过了最大重试次数:/ nbr / services / NBRStorageService(由NewConnectionError(':导致:无法建立新连接:[WinError 10060 ]连接尝试失败,因为连接的一方在一段时间后未正确响应,或者建立的连接失败,因为连接的主机未能响应'))“”

1 个答案:

答案 0 :(得分:0)

您实际上不是在呼叫client.service.downloadNBRStorageFile。要实际调用该方法,您需要:

pack = client.service.downloadNBRStorageFile()

(请注意括号的结尾。)

您当前的代码只是将client.service.downloadNBRStorageFile对象分配给您的pack变量,这就是为什么您的错误消息引用的是OperationProxy类型。