在bash

时间:2016-01-26 15:00:55

标签: bash curl oauth-2.0 vk

我想编写一个可以与vk.com API一起使用的bash脚本。

我的第一步是进行OAuth2.0授权。但是我无法使用网络浏览器,因为我的脚本可以在没有xserver的情况下在机器上运行。

如开发者页面所述,我首先需要发出GET请求:

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

有了这个请求就可以了。然后我打开了这个页面的源代码,发现了下一个代码:

<form method="post" action="https://login.vk.com/?act=login&soft=1&utf8=1">
<input type="hidden" name="_origin" value="https://oauth.vk.com">
<input type="hidden" name="ip_h" value="<some_value>" />
<input type="hidden" name="lg_h" value="<some_value>" />
<input type="hidden" name="to" value="<some_value>">
<dl class="fi_row">
<dt class="fi_label">Phone or email:</dt>
<dd>
<div class="iwrap"><input type="text" class="textfield" name="email" value="" /></div>
</dd>
</dl>
<dl class="fi_row">
<dt class="fi_label">Password:</dt>
<dd>
<div class="iwrap"><input type="password" class="textfield" name="pass" /></div>
</dd>
</dl>
<div class="fi_row">
<div class="fi_subrow">
<input class="button" type="submit" value="Log in" /><div class="near_btn"><a href="//oauth.vk.com/blank.html#error=access_denied&error_reason=user_denied&error_description=User denied your request">Cancel</a></div>
</div>
</div>
<div class="fi_row_new">
<div class="fi_header fi_header_light">Not registered yet?</div>
</div>
<div class="fi_row">
<a class="button wide_button gray_button" href="https://m.vk.com/join?api_hash=a9612b3095c82d30df">Sign up for VK</a>
</div>
</form>

这意味着要进行授权,我需要将POST请求发送到

https://login.vk.com/?act=login&soft=1&utf8=1

并作为参数传递下一个输入:

_origin, ip_h, lg_h, to, email, pass

但它没有用。我没有使用curl获取任何内容并获取错误页面,其中包含使用gui使用不同的其他客户端进行错误传递或登录的消息。我认为这个问题可能存在于cookie中,但添加cookie不会产生任何效果。

脚本代码我正在努力工作:

#!/bin/bash
username=$1
password=$2

response=$(curl --cookie-jar vk.txt "https://oauth.vk.com/authorize" --data "client_id=<app_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=<some_value>&lg_h=<some_value>&to=<some_value>&email=<my_email>&pass=<my_pass>")
echo "response is $response"
echo "================================================================="

exit 0

我尝试了不同的cookie形式的卷曲不同的参数。但结果是一样的。 也许我需要做特殊安全编码的问题因为SSL?但不应该卷曲吗?

我在python上发现了一个脚本,当时我没有做任何动作,但是他的代码运行正常。当然,这可能是因为他的第三方文库用于休息请求,但可能不是。链接到本文(俄文): https://habrahabr.ru/post/143972/

0 个答案:

没有答案