Логин пользователя Parse.com - ошибка 404

Я довольно неопытен в аутентификации пользователей, особенно через спокойный API. Я пытаюсь использовать python для входа в систему с пользователем, настроенным на parse.com. Ниже приведен код, который у меня есть:

  API_LOGIN_ROOT = 'https://api.parse.com/1/login'
  params = {'username':username,'password':password}
  encodedParams = urllib.urlencode(params)

  url = API_LOGIN_ROOT + "?" + encodedParams

  request = urllib2.Request(url)

  request.add_header('Content-type', 'application/x-www-form-urlencoded')

  # we could use urllib2's authentication system, but it seems like overkill for this
  auth_header =  "Basic %s" % base64.b64encode('%s:%s' % (APPLICATION_ID, MASTER_KEY))
  request.add_header('Authorization', auth_header)
  request.add_header('X-Parse-Application-Id', APPLICATION_ID)
  request.add_header('X-Parse-REST-API-Key', MASTER_KEY)

  request.get_method = lambda: http_verb


  # TODO: add error handling for server response
  response = urllib2.urlopen(request)
  #response_body = response.read()
  #response_dict = json.loads(response_body)

Это модификация библиотеки с открытым исходным кодом, используемой для доступа к интерфейсу синтаксического анализа.

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
    handler.post(*groups)
  File "/Users/nazbot/src/PantryPal_AppEngine/fridgepal.py", line 464, in post
    url = user.login()
  File "/Users/nazbot/src/PantryPal_AppEngine/fridgepal.py", line 313, in login
    url = self._executeCall(self.username, self.password, 'GET', data)
  File "/Users/nazbot/src/PantryPal_AppEngine/fridgepal.py", line 292, in _executeCall
    response = urllib2.urlopen(request)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 404: Not Found

Может ли кто-нибудь указать мне, где я облажался? Я не совсем понимаю, почему я получаю 404 вместо отказа в доступе или какой-либо другой проблемы.


person nazbot    schedule 19.04.2012    source источник
comment
Вы можете попробовать использовать http://kennethreitz.com/requests-python-http-module.html вместо urlib2. Начните смотреть это видео с отметки 5:00. У него могут быть некоторые подсказки относительно того, что не так с вашим кодом: youtu.be/Q1pe6lHZeNs   -  person alan    schedule 20.04.2012
comment
Вам не нужен заголовок авторизации с REST (и это неправильный формат), и вы не должны использовать свой главный ключ. Используйте ключ REST API, чтобы ограничить доступ к вашему запросу. Python больше не мой самый сильный язык, но документы, кажется, предполагают, что параметры urlencoded в форме x-www-form-encoded должны быть просто частью данных. Попробуйте удалить заголовок Content-type[sic] и создать экземпляр запроса с помощью urllib2.Request(API_LOGIN_ROOT, encodedParams)   -  person Thomas Bouldin    schedule 25.04.2012


Ответы (2)


Убедитесь, что класс «Пользователь» был создан на Parse.com как специальный пользовательский класс. Когда вы добавляете класс, обязательно измените тип класса на «Пользовательский» вместо «Пользовательский». Маленькая иконка головы пользователя появится рядом с именем класса с левой стороны.

Это долгое время ставило меня в тупик, пока Мэтт из команды Parse не показал мне проблему.

person Jie Zhou    schedule 26.08.2012

Измените: API_LOGIN_ROOT = 'https://api.parse.com/1/login' на следующее: API_LOGIN_ROOT = 'https://api.parse.com/1/login**/**'

У меня была та же проблема с использованием PHP, добавление / в конце исправило ошибку 404.

person slynx    schedule 29.03.2013