Yodlee:无法在getMFAResponseForSite - Python中将图像字节转换为验证码

时间:2015-08-06 16:57:02

标签: python authentication captcha yodlee

正如您在帖子(Java)中看到的那样:

getMFAResponseForSite - rendering array as a captcha image

和(C#)

Yodlee: Unable to convert image codes into captcha in getMFAResponseForSite(Captcha type) - C#

Yodlee API mWebView= (WebView) findViewById(R.id.textView); 使用包含MFA表单的JSON回答。在Python中,我正在尝试以下解决方案,但没有结果:

getMFAResponseForSite

我尝试直接转换bytes数组,但是它会抛出一个错误,因为字节值必须介于0到255之间

我希望有人知道如何解决这个问题

3 个答案:

答案 0 :(得分:1)

此处采取了许多额外步骤,以及未使用的导入。另外,对我来说,回来的yodlee图像数据是windows bmp数据(不是jpg)。这是答案的本质:

with open('captcha.bmp', 'wb') as c:
    write(''.join(map(lambda x: chr(x % 256), img_array)))

或,如链接帖子所示:

with open('captcha.bmp', 'wb') as c:
    write(str(bytearray(map(lambda x: chr(x % 256), img_array))))

这直接适用于getMFAResponseForSite提供的fieldInfo.image数组。

答案 1 :(得分:0)

感谢用户Apporv的帮助,现在我回答了我的问题:

使用以下post,我将Yodlee字节数组转换为Python数组。代码是:

import array
import base64

img_array = [66, 77, -98, -19, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40,...]    

bin_data = ''.join(map(lambda x: chr(x % 256), img_array))
new_img_array = []

for x in bin_data:
    new_img_array.append(x)

img_byte_array = bytearray(new_img_array)
fh = open("path.jpg", "wb")
fh.write(img_byte_array)
fh.close()

就是这样!

答案 2 :(得分:0)

和c#版本:

var array = new int[] { 66, 77, 110, -60, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0, 0};
var byteList = new List<byte>();

foreach (var item in array)
{
    var value = (byte)(item < 0 ? byte.MaxValue + 1 + item : item);
    byteList.Add(value);
}

File.WriteAllBytes(@"captcha.jpg", byteList.ToArray());