Авторизация Dropbox с использованием механизированного Python - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь войти в Dropbox (dropbox.com/login) с помощью механизации на Python. Я думаю, что что-то упустил, поскольку ответ возвращается как HTTP Запрещенная ошибка 403.

Это код, который я использовал:

import mechanize


url = "https://www.dropbox.com/login"
email = "<USERNAME>"
password = "<PASSWORD>"

br = mechanize.Browser()
br.set_handle_equiv(False)
br.set_handle_gzip(False)
br.set_handle_redirect(False)
br.set_handle_referer(False)
br.set_handle_robots(False)

br.addheaders = [('Host', 'www.dropbox.com')]
br.addheaders = [('Connection', 'keep-alive')]
#br.addheaders = [('Content-Length', '7385')]
br.addheaders = [('Upgrade-Insecure-Requests', 1)]
br.addheaders = [('Origin', 'https://www.dropbox.com')]
br.addheaders = [('X-Requested-With', 'XMLHttpRequest')]
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')]
br.addheaders = [('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8')]
br.addheaders = [('Content-Type', 'application/x-www-form-urlencoded; 
charset=UTF-8')]
br.addheaders = [('Referer', 'https://www.dropbox.com/login? 
cont=https%3A%2F%2Fwww.dropbox.com')]
br.addheaders = [('Accept-Encoding', 'gzip, deflate, br')]
br.addheaders = [('Accept-Language', 'en-US,en;q=0.9')]
br.addheaders = [('Cookie', '<COOKIE DATA>')]

response = br.open(url)
try:
    formcount=0
    for frm in br.forms():  
      if str(frm.attrs["class"])=="clearfix credentials-form login-form":
        break
      formcount=formcount+1
    br.select_form(nr=formcount)
    br.form.set_all_readonly(False)
except:
    print("Unable to find login form.");
    exit(1);


br.form['login_email'] = email
br.form['login_password'] = password

response = br.submit(nr = formcount)
print response.text

И это ответ:

Traceback (most recent call last):
  File "login.py", line 51, in <module>
    response = br.submit(nr = formcount)
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 685, in 
submit
    return self.open(self.click(*args, **kwds))
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 254, in 
open
    return self._mech_open(url_or_request, data, timeout=timeout)
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 310, in 
_mech_open
    raise response
mechanize._response.httperror_seek_wrapper: HTTP Error 403: Forbidden

Я знаю, что что-то упустил, но не могу понять, что. * Замечу, что я скопировал заголовки из перехваченного запроса, сделанного в браузере. Я знаю, что есть SDK для Dropbox API, но мне нужно почистить сайт ..

Спасибо заранее, Амит.

1 Ответ

0 голосов
/ 26 апреля 2018

Создание сценариев / очистка веб-сайта Dropbox является нарушением условий Dropbox . В любом случае, я бы не рекомендовал делать это в любом случае, так как он может быть изменен без предварительного уведомления, и поэтому ваш код может быть поврежден.

Dropbox действительно предлагает расширенный API , который, как мы надеемся, предлагает любую функциональность, которую вы ищете, а также официальный Python SDK . Я рекомендую использовать это вместо.

Если API не предлагает то, что вам нужно, сообщите нам об этом, и мы зарегистрируем его как запрос функции.

...