我试图在不使用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)
答案 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码。祝你好运!