Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

OAuth2.0 vk.com используя curl и bash

#vkontakte_api #bash #вконтакте #curl #oauth2


Я хочу написать баш скрипт, который будет взаимодействовать с контактом через апи.

Для начала необходимо запрограммировать OAuth2.0 авторизацию. Все казалось бы просто,
но проблема в том, что я не могу использовать браузер, так как хочу чтобы мой скрипт
работал на юниксовой машине без иксов и без вмешательства пользователя, то есть меня.

Исходя из документация сайта вконтакте сначала я должен выполнить GET запрос:

https://oauth.vk.com/authorize?client_id=&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&scope=video,audio&response_type=token&v=5.44&revoke=1


Этот запрос выполняется нормально и я получаю страницу для отображения пользователю
с формами ввода. На данной странице меня интересует только следующий код:

Phone or email:
Password:
Not registered yet?
Исходя из документации и этого кода делаю вывод что должен реализовать следующее, то есть отправить пост запрос: https://login.vk.com/?act=login&soft=1&utf8=1 и в качестве параметров передать следующие поля: _origin, ip_h, lg_h, to, email, pass Но этот запрос у меня не работает. Возвращается пустая строка при попытке выполнить через curl и страница с ошибкой, мол неправильный пароль если отправляю запрос через какой-нибудь REST клиент. Была мысль что проблема может быть в том, что я не использую куки, но с их добавлением тоже ничего не изменилось, хотя возможно я что-то сделал не так. Скрипт, который я пытаюсь заставить работать: #!/bin/bash username=$1 password=$2 response=$(curl --cookie-jar vk.txt "https://oauth.vk.com/authorize" --data "client_id=&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&scope=video,audio&response_type=token&v=5.44&revoke=1") echo "response is $response" echo "=================================================================" response=$(curl --request POST --cookie vk.txt "https://login.vk.com/?act=login&soft=1&utf8=1" --data-urlencode "_origin=https://oauth.vk.com&ip_h=&lg_h=&to=&email=&pass=") echo "response is $response" echo "=================================================================" exit 0 Я пробовал играться с параметрами curl, например, кодировать, раскодировать передаваемые данные запроса. Но в результате получаю одно и то же. Может быть я должен проводить какое-то дополнительное кодирование или шифрование прежде чем выполнять запрос? Если да, то почему curl не выполняет это по умолчанию? Я нашел на просторах статью, где эта задача решалась на питоне и у чувака все работает. Я воспользовался его питоновским кодом, переделав его под третий питон, но он также не работает. Возвращает пустую страницу после ввода логина и пароля, хотя должен возвращать страницу с разрешениями для приложения. Мне кажется, что механизм авторизации претерпел некоторые изменения, в связи с чем код перестал работать. Вот ссылка на ту статью: https://habrahabr.ru/post/143972/ Вообщем вопрос в следующем: как сделать так чтобы всё заработало или что я делаю не так?


Ответы

Ответ 1



А redirect_uri у вас соответствует тому, что вы указали при регистрации приложения? Если нет, то проблема в этом.

Комментариев нет:

Отправить комментарий