Skip to content

Commit 66156cf

Browse files
committed
reverse engineered login
0 parents  commit 66156cf

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.idea
2+

main.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import requests
2+
from bs4 import BeautifulSoup
3+
4+
import time
5+
import urllib.parse
6+
7+
8+
def login(username, password):
9+
session = requests.Session()
10+
11+
r = session.get('https://runkeeper.com')
12+
soup = BeautifulSoup(r.text, 'html.parser')
13+
qs = urllib.parse.parse_qs(urllib.parse.urlparse(soup.find(class_='log-in').find('a')['href'][27:-2]).query)
14+
15+
state = qs['state']
16+
17+
session.post('https://id.asics.com/oauth2/token/auth', data={
18+
'username': username,
19+
'password': password,
20+
'language': 'en',
21+
'locale': 'en-US',
22+
'grant_type': 'password',
23+
'client_id': 'runkeeper',
24+
'style': 'runkeeper',
25+
'max_cookie_timeout': '',
26+
'platform': 'web'
27+
})
28+
29+
r = session.post('https://id.asics.com/oauth2/authorize', params={
30+
'response_type': 'code',
31+
'client_id': 'runkeeper',
32+
'redirect_uri': 'https://runkeeper.com/asicsIDMLogin',
33+
'state': state
34+
})
35+
36+
qs = urllib.parse.parse_qs(urllib.parse.urlparse(r.url).query)
37+
r = session.get('https://runkeeper.com/asicsIDMLogin', params={
38+
'submit': '',
39+
'code': qs['code'][0],
40+
'state': qs['state'][0],
41+
'error': ''
42+
})
43+
44+
assert r.url == 'https://runkeeper.com/home?llsignup=false'
45+
print('Success!')
46+
47+
return session
48+
49+
50+
session = login('', '')

requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
requests>=2.21.0
2+
beautifulsoup4>=4.6.3

0 commit comments

Comments
 (0)