2012-04-19 14 views
0

私はかなり落ち着いたapisを通じて、特にユーザー認証で経験が浅いです。私はPythonを使用して、parse.comに設定されているユーザーでログインしようとしています。以下は、私が持っているコードです:Parse.comユーザーログイン - 404エラー

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になっているのはなぜか分かりません。

+0

urlib2ではなくhttp://kennethreitz.com/requests-python-http-module.htmlを試してみてください。このビデオを5時マークで見始める。あなたのコードに何が間違っているかについていくつかの手掛かりがあるかもしれません:http://youtu.be/Q1pe6lHZeNs – alan

+0

あなたはRESTでAuthorizationヘッダーを必要としません(これも正しいフォーマットです)。マスターキー。リクエストのアクセスを制限するには、REST APIキーを使用します。 Pythonはもはや私の最強の言語ではありませんが、ドキュメントでは、x-www-form-encodedの形式のurlencoded paramsはデータの一部でなければならないことを示唆しています。 "Content-type" [sic]ヘッダーを削除し、urllib2.Request(API_LOGIN_ROOT、encodedParams)でリクエストをインスタンス化してみてください。 –

答えて

1

"User"クラスが特別なユーザークラスとしてParse.comに作成されていることを確認してください。クラスを追加するときは、クラスの種類を「カスタム」ではなく「ユーザー」に変更してください。左側のクラス名の隣に小さなユーザーの頭のアイコンが表示されます。

パースチームのMattさんが私に問題を示してくれるまで、これは長い間私を困らせました。

0

変更してください:次のようにAPI_LOGIN_ROOT = 'https://api.parse.com/1/login'を:API_LOGIN_ROOT = 'https://api.parse.com/1/login**/**'

私は最後エラーを修正で/を追加し、PHPを使用して同じ問題を抱えていました。