私はOAuthを私のプロジェクト内で使用しています。私は認証の問題に遭遇しました。PUTでOAuth認証に失敗しました
Oauthの認証メカニズムを "POST"メソッドで渡すことはできますが、 "PUT"メソッドではできません。 POSTリクエストとPUTリクエストの唯一の違いは、メソッドタイプです。本文とヘッダーは同じです。
POST
resp, cont = client.request("http://localhost:8000/api/1.0/booking/",
"POST",
data_booking,
headers=headers)
PUT
resp, cont = client.request("http://localhost:8000/api/1.0/booking/",
"PUT",
data_booking,
headers=headers)
クライアントはOAuthのクライアントで次のように私が使用した要求があります。
サーバによって返されたエラーメッセージがある:
FYI:401不正禁止403に類似するが、具体的に使用するための
認証が可能であるが、故障しているか、まだ提供されていません
私はdjangoフレームワークを使用して開発しています。
リクエスト方法は以下の通りです:
def request(self, uri, method="GET", body=None, headers=None,
redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None,
callback_url=None, realm=''):
DEFAULT_CONTENT_TYPE = 'application/x-www-form-urlencoded'
if not isinstance(headers, dict):
headers = {}
is_multipart = method == 'POST' and headers.get('Content-Type',
DEFAULT_CONTENT_TYPE) != DEFAULT_CONTENT_TYPE
if body and (method == "POST" or method == 'PUT') and not is_multipart:
parameters = dict(parse_qsl(body))
if callback_url != None:
parameters['oauth_callback'] = callback_url
else:
if callback_url != None and not is_multipart:
parameters = {'oauth_callback': callback_url}
else:
parameters = None
req = Request.from_consumer_and_token(self.consumer,
token=self.token, http_method=method, http_url=uri,
parameters=parameters)
req.sign_request(self.method, self.consumer, self.token)
if method == "POST" or method == "PUT":
headers['Content-Type'] = headers.get('Content-Type',
DEFAULT_CONTENT_TYPE)
if is_multipart:
headers.update(req.to_header(realm))
else:
body = req.to_postdata()
elif method == "GET":
uri = req.to_url()
else:
headers.update(req.to_header(realm))
return httplib2.Http.request(self, uri, method=method, body=body,
headers=headers, redirections=redirections,
connection_type=connection_type)
誰もが考えていますか?
エラーが発生していますか?私は質問にあなたを助けることができる十分な情報があるとは思わない。 – diagonalbatman
@diagonalbatman私はサーバー側から受け取った答えを追加しました。 – Mathieu
特定のエラーが返されますか?私はあなたのコードをもっと見る必要があると思います。 – diagonalbatman