Меня попросил друг написать скрипт для сметы для ask.fm и подумал, что это будет довольно просто, но мне не удалось выяснить процесс входа в систему. Я нашел кучу сообщений о входе в систему с python, но не успел адаптировать код.Вход в ask.fm с Python
В соответствии с консолью разработчика Chrome, POST для обычного входа в браузер допускает аутентификацию, авторизацию (имя пользователя), пароль и фиксацию («Вход») в качестве данных формы.
import requests
import cookielib
from urllib2 import build_opener, HTTPCookieProcessor, HTTPHandler, Request
from bs4 import BeautifulSoup
#do a GET to the login page and get the authentication token
loginGet = requests.get('http://ask.fm/login/')
data = loginGet.text
soup = BeautifulSoup(data)
inputs = soup.find('input', {'name':"authenticity_token"})
authToken = inputs['value']
#find default values of form fields (<input> elements below #login_form element
cookies = cookielib.CookieJar()
opener = build_opener(HTTPCookieProcessor(cookies), HTTPHandler())
req = Request("http://www.ask.fm/login/")
f = opener.open(req)
for cookie in cookies:
if cookie.name == "_ask.fm_session":
sessionCookie = cookie.value
#add default values to email and password data
form_data = {'authenticity_token' : authToken,
'login' : USERNAME,
'password' : PASSWORD,
'commit' : 'Log in' }
headers = {'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
'Accept-Encoding' : 'gzip,deflate,sdch',
'Accept-Language' : 'en-US,en;q=0.8,de;q=0.6',
'Cache-Control' : 'max-age=0',
'Connection' : 'keep-alive',
'Content-Length' : '115',
'Host' : 'ask.fm',
'Origin' : 'http://ask.fm',
'Referer' : 'http://ask.fm/login',
'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36' }
#send login using Requests Session
url = 'http://ask.fm/login/'
cookies = {"_ask.fm_session" : sessionCookie}
s = requests.Session()
r = s.post(url, data=form_data, cookies=cookies, headers=headers)
wall = s.get("http://ask.fm/account/wall", headers=headers, timeout=10)
print wall.content
Когда я выполняю код, get в конце всегда разрывается. Также кажется, что r.content (из строки post()) имеет тот же HTML, что и главная страница ask.fm, а не страница, на которую переадресовывается успешный вход в систему.
Я тоже не слишком уверен ... Я удалил эту строку. Это экран инструментов разработчика Chrome, который я вижу - http://www.screencast.com/t/ioY0tr6wk Точность аутентификации, которую я получаю в верхней части программы, кажется, получает правильное значение. – user139260
Действительно, токен подлинности кажется хорошим, но посмотрите на кодировку, о которой я говорю, для данных, которые вы отправляете. Chrome отображает его как список, но нажмите «Просмотр источника» рядом с данными формы, и вы увидите, что получает сервер. Это не список, это name = value & name2 = value2 string! Позвольте мне знать ваш прогресс. – Tavarich