2014-08-04 2 views
2

Меня попросил друг написать скрипт для сметы для 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, а не страница, на которую переадресовывается успешный вход в систему.

ответ

2

Могу ли я узнать, почему длина вашего контента всегда одинакова? Вы также должны быть осторожны, о форме данных, которые вы представляемые, данные форм, отправленные на сервер не список, это может быть что-то вроде

authenticity_token=123&username=toto&password=toto&... 

Попробуйте что-то вроде этого, и дайте мне знать

+0

Я тоже не слишком уверен ... Я удалил эту строку. Это экран инструментов разработчика Chrome, который я вижу - http://www.screencast.com/t/ioY0tr6wk Точность аутентификации, которую я получаю в верхней части программы, кажется, получает правильное значение. – user139260

+0

Действительно, токен подлинности кажется хорошим, но посмотрите на кодировку, о которой я говорю, для данных, которые вы отправляете. Chrome отображает его как список, но нажмите «Просмотр источника» рядом с данными формы, и вы увидите, что получает сервер. Это не список, это name = value & name2 = value2 string! Позвольте мне знать ваш прогресс. – Tavarich

Смежные вопросы