如何从VK API的响应中获取验证码?

时间:2015-08-08 09:30:30

标签: python exception captcha vk vk-sdk

我有一个Python脚本,可以帮助我在VK中发布一些笔记。但有时我的脚本需要解决验证码。我有以下代码:

vk = vkontakte.API(token=token)
response = vk.wall.repost(object = link)

据我了解,如果我需要解决验证码,VK API会引发异常。但是,我找不到任何例子。问题是我无法从中获取captcha_sidcaptcha_img

或许您知道如何以JSON格式获得响应,而不是例外?

2 个答案:

答案 0 :(得分:0)

您可以通过http请求访问vk api。为此,您需要access_token,如果您还没有,请阅读here如何获取它。

然后你可以通过链接轻松实现

https://api.vk.com/method/wall.repost?object=WALL_OBJECT_HERE&group_id=TARGET_GROUP_ID&access_token=YOUR_ACCESS_TOKEN

如果重新发布成功,您会看到如下响应:

{"response":{"success":1,"post_id":676,"reposts_count":3,"likes_count":11}}

但是如果你需要解决验证码,那么响应就像这样:

{"error":{"error_code":14,"error_msg":"Captcha needed","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"wall.repost"},{"key":"object","value":"your_object_here"},{"key":"group_id","value":"56983001"}],"captcha_sid":"381041951450","captcha_img":"http:\/\/api.vk.com\/captcha.php?sid=381041951450&s=1"}}

现在您只需添加2个参数即可轻松获取验证码sid和captcha_img链接,下载,解决并重复请求:captcha_key=YOUR_SOLVED_CAPTCHA&captcha_sid=SID_YOU_GOT

成功:)

答案 1 :(得分:0)

首先,确保您拥有vkapi的最后一个稳定版本

但是,在收到VKError的旧版本中,captcha_imgcaptcha_sid.error的关键,而不是Exception本身的关键:

except vkerror as e:
    captcha_img = e.error['captcha_img']
    captcha_sid = e.error['captcha_sid']

请确保您已定义正确的错误:

vkapi = vk.API(access_token=ACCESS_TOKEN)
vkerror = vk.api.VkAPIMethodError  # not vk.API (still it has the same Exception in it)