摆脱额外的' b'将二进制格式更改为base64

时间:2017-11-02 22:21:18

标签: python api soap binary base64

我遇到了一个奇怪的问题。我正在使用EBI SOAP服务之一,并且我正在运行三次迭代。在第一次迭代中,我在运行代码时没有问题,因为变量' selectedHits'是空的。在第一次迭代结束时,我更新了变量' selectedHits'然后将其更改为二进制格式,然后更改为base64格式(因为此变量必须为base64格式)。这是我的代码的一部分:

jobID=''; selectedHits=''
for e in range(1,4):
    inputparam = client.factory.create('InputParameters')
    inputparam.scores=5
    inputparam.alignments=5
    inputparam.previousjobid = jobID
    inputparam.selectedHits = selectedHits

    response = client.service.run('Info@gmail.com',name,inputparam)
    jobID=response
    selectedHits=str(base64.b64encode(bytes(selectedHits, 'utf-8')),'utf-8')
    #print(selectedHits)
    #print(response)

想象一下,我们新的selectedHits如下:

b'U1A6RlJEQ19FQ09MSQpTUDpGUkRDX1NISURTClRSOkQyVE1CM19DSVRSSQpTUDpGUkRDX1NBTFRZClRSOkQ0QkZKMV85RU5UUgo='

当我使用这个新的' selectedHits'在第二次迭代中,而不是得到我得到的结果' Info@gmail.com'反复!!!当我手动消除字符' b'在这个新的' selectedHits'的第一部分,我会得到结果。当我试图消除角色' b'通过不同的方式自动(这里使用以下代码):

selectedHits=str(base64.b64encode(bytes(selectedHits, 'utf-8')),'utf-8')

,我大多没有得到结果而且我会收到错误(总结如下):

ValueError: invalid literal for int() with base 16: b''
http.client.IncompleteRead: IncompleteRead(0 bytes read)
raise IncompleteRead(b''.join(value))
http.client.IncompleteRead: IncompleteRead(5228 bytes read)

我很困惑,也不知道该怎么做。当我消除' b'自动,我没有得到结果。当我保留这个' b'性格,我也没有得到结果!只需手动删除字符并使用selectedHits的以下值,我就会得到答案:

'U1A6RlJEQ19FQ09MSQpTUDpGUkRDX1NISURTClRSOkQyVE1CM19DSVRSSQpTUDpGUkRDX1NBTFRZClRSOkQ0QkZKMV85RU5UUgo='

我应该提一下,我在python 3.6中编写代码。

我搜索了stackoverflow并找到了很多方法来摆脱这个额外的' b'但是在这种情况下它们没有效果并且问题没有得到解决。

我想知道是否有人有任何想法帮助我解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

我认为这是一种服务器问题......昨晚我尝试了以下内容并得到了答案:

首先我认为所有这些错误都是出于'selectedHits'初始化错误的原因:

selectedHits=  ''

我们说selectedHits必须是二进制和base 64格式;所以初始化值也必须是二进制形式;所以我们将初始化'selectedHits'设置为二进制形式,如下所示:

selectedHits=''
selectedHits=base64.b64encode(bytes(selectedHits, 'utf-8'))

我还将最终'selectedHits'的代码更改为:

selectedHits=base64.b64encode(bytes(selectedHits, 'utf-8'))

所有这些问题和错误都得到了解决......但今天我再次尝试了,而不是得到结果,我输入了很多电子邮件地址!

我尝试将'selectedHits'更改为二进制,然后更改为base64,然后再次将其更改为初始化和更新(在代码末尾),我得到了正确答案,所以我认为它主要是一种服务器问题而不是技术编程错误。

由于