Cookielib и формы проверки подлинности горе в Python - PullRequest
0 голосов
/ 09 января 2010

InstaMapper - это сервис GPS-отслеживания, который обновляет положение устройства чаще, когда устройство отслеживается в режиме реального времени на веб-странице InstaMapper. Я бы хотел, чтобы это происходило постоянно, поэтому я решил написать скрипт на python для входа в свою учетную запись и периодического доступа к странице.

import urllib2, urllib, cookielib

cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
urllib2.install_opener(opener)

params = urllib.urlencode(dict(username_hb='user', password_hb='hunter2')) 
opener.open('http://www.instamapper.com/fe?action=login', params)
if not 'id' in [cookie.name for cookie in cj]:
    raise ValueError, "Login failed"

# try secured page
resp = opener.open('http://www.instamapper.com/fe?page=track&device_key=abc')
print resp.read()
resp.close()

Ошибка ValueError повышается каждый раз. Если я удаляю это и читаю ответ, страница думает, что я отключил куки и блокирует доступ к этой странице. Почему cj не захватывает cookie-файл InstaMapper?

Существуют ли более эффективные способы заставить службу отслеживания думать, что я постоянно просматриваю свою учетную запись?

Ответы [ 2 ]

0 голосов
/ 09 января 2010

Вы смотрели, есть ли печенье, специально разработанное, чтобы сорвать ваши попытки? Я предлагаю использовать Wireshark или другой инспектор, чтобы увидеть, есть ли файл cookie, который изменяется (через javascript и т. Д.), Когда вы входите вручную.

(Этическое примечание. Возможно, вы нарушаете условия обслуживания и несете с компанией гораздо большие расходы, чем вы платите. Я использовал для запуска службы, подобной этой, и каждое дополнительное / незапланированное обновление местоположения составляло от 0,01 до 0,05 долл. Я уверен, что это сойдет.)

0 голосов
/ 09 января 2010

action=login является частью параметров и должно обрабатываться соответственно:

params = urllib.urlencode(dict(action='login', username_hb='user', password_hb='hunter2')) 
opener.open('http://www.instamapper.com/fe', params)

(Кроме того, эта конкретная комбинация имени пользователя и пароля недействительна, я полагаю, что вы действительно используете действительное имя пользователя и пароль в своем фактическом коде, в противном случае вход в систему будет неудачным).

...