Instagram python请求无需API登录

时间:2018-04-25 10:21:31

标签: python cookies python-requests

我试图在不使用API​​但是收到403响应的情况下登录Instagram?凭据是正确的,但仍然得到响应。对此事有任何帮助吗?

import requests

main_url = 'https://www.instagram.com/'
login_url = main_url+'accounts/login/'
user_agent = 'User-Agent: Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25'

session = requests.session()
session.headers = {"user-agent": user_agent}
session.headers.update({'Referer': main_url})

req = session.get(main_url)
session.headers.update({'set-cookie': req.cookies['csrftoken']})
print(req.cookies['csrftoken'])
print(req.status_code)

login_data = {"username": "<user>", "password": "<pass>"}


login = session.post(login_url, data=login_data, allow_redirects=True)
print(login.cookies['csrftoken'])
print(login.status_code)
session.headers.update({'set-cookie': login.cookies['csrftoken']})

cookies = login.cookies

print(login.headers)
print(login.status_code)

2 个答案:

答案 0 :(得分:0)

RFC 7231声明如下:

  

403禁止

     

403(禁止)状态代码表示服务器已理解      请求但拒绝授权。希望的服务器      公开为什么禁止请求可以描述      响应有效负载中的原因(如果有的话)。

     

如果请求中提供了身份验证凭据,即可      服务器认为它们不足以授予访问权限。客户端      不应该自动重复请求      证书。客户端可以用新的或不同的方式重复请求      证书。但是,出于原因可能会禁止请求      与证书无关。

所以看起来服务器不允许您在不使用官方API的情况下访问所需的数据。

答案 1 :(得分:0)

我玩弄了您的代码,它确实返回了403。

但是,可以通过在您的POST请求中发送的数据变量中添加 csrfmiddlewaretoken 属性来解决此问题。将代码行从以下位置更改:

login_data = {"username": "<user>", "password": "<pass>"}

login_data = {"csrfmiddlewaretoken": req.cookies['csrftoken'], "username": "<user>", "password": "<pass>"}

此外,在您的/ajax变量的末尾添加一个login_url。否则它将无法通过身份验证。

此后会给您200码。祝你好运!