[instagram] fix login (fixes #1631)
This commit is contained in:
@@ -120,10 +120,7 @@ class InstagramExtractor(Extractor):
|
|||||||
if not self._check_cookies(self.cookienames):
|
if not self._check_cookies(self.cookienames):
|
||||||
username, password = self._get_auth_info()
|
username, password = self._get_auth_info()
|
||||||
if username:
|
if username:
|
||||||
self.session.cookies.set(
|
|
||||||
"ig_cb", "2", domain="www.instagram.com")
|
|
||||||
self._update_cookies(self._login_impl(username, password))
|
self._update_cookies(self._login_impl(username, password))
|
||||||
|
|
||||||
self.session.cookies.set(
|
self.session.cookies.set(
|
||||||
"csrftoken", self.csrf_token, domain=self.cookiedomain)
|
"csrftoken", self.csrf_token, domain=self.cookiedomain)
|
||||||
|
|
||||||
@@ -131,33 +128,42 @@ class InstagramExtractor(Extractor):
|
|||||||
def _login_impl(self, username, password):
|
def _login_impl(self, username, password):
|
||||||
self.log.info("Logging in as %s", username)
|
self.log.info("Logging in as %s", username)
|
||||||
|
|
||||||
page = self.request(self.root + "/accounts/login/").text
|
url = self.root + "/accounts/login/"
|
||||||
|
page = self.request(url).text
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
"Referer" : self.root + "/accounts/login/",
|
"X-Web-Device-Id" : text.extract(page, '"device_id":"', '"')[0],
|
||||||
"X-IG-App-ID" : "936619743392459",
|
"X-IG-App-ID" : "936619743392459",
|
||||||
|
"X-ASBD-ID" : "437806",
|
||||||
|
"X-IG-WWW-Claim" : "0",
|
||||||
"X-Requested-With": "XMLHttpRequest",
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
|
"Referer" : url,
|
||||||
}
|
}
|
||||||
|
url = self.root + "/data/shared_data/"
|
||||||
|
data = self.request(url, headers=headers).json()
|
||||||
|
|
||||||
response = self.request(self.root + "/web/__mid/", headers=headers)
|
headers["X-CSRFToken"] = data["config"]["csrf_token"]
|
||||||
headers["X-CSRFToken"] = response.cookies["csrftoken"]
|
headers["X-Instagram-AJAX"] = data["rollout_hash"]
|
||||||
headers["X-Instagram-AJAX"] = text.extract(
|
headers["Origin"] = self.root
|
||||||
page, '"rollout_hash":"', '"')[0]
|
|
||||||
|
|
||||||
url = self.root + "/accounts/login/ajax/"
|
|
||||||
data = {
|
data = {
|
||||||
"username" : username,
|
"username" : username,
|
||||||
"enc_password" : "#PWD_INSTAGRAM_BROWSER:0:{}:{}".format(
|
"enc_password" : "#PWD_INSTAGRAM_BROWSER:0:{}:{}".format(
|
||||||
int(time.time()), password),
|
int(time.time()), password),
|
||||||
"queryParams" : "{}",
|
"queryParams" : "{}",
|
||||||
"optIntoOneTap": "false",
|
"optIntoOneTap" : "false",
|
||||||
|
"stopDeletionNonce" : "",
|
||||||
|
"trustedDeviceRecords": "{}",
|
||||||
}
|
}
|
||||||
|
url = self.root + "/accounts/login/ajax/"
|
||||||
response = self.request(url, method="POST", headers=headers, data=data)
|
response = self.request(url, method="POST", headers=headers, data=data)
|
||||||
|
|
||||||
if not response.json().get("authenticated"):
|
if not response.json().get("authenticated"):
|
||||||
raise exception.AuthenticationError()
|
raise exception.AuthenticationError()
|
||||||
|
|
||||||
|
cget = self.session.cookies.get
|
||||||
return {
|
return {
|
||||||
key: self.session.cookies.get(key)
|
name: cget(name)
|
||||||
for key in ("sessionid", "mid", "csrftoken")
|
for name in ("sessionid", "mid", "ig_did")
|
||||||
}
|
}
|
||||||
|
|
||||||
def _parse_post_graphql(self, post):
|
def _parse_post_graphql(self, post):
|
||||||
|
|||||||
Reference in New Issue
Block a user