10

私はPythonとOAuthの世界では初めてです。コンシューマーキーとシークレットを使用してサーバーに接続したいのですが、見つけたすべての例は、サーバーにaccess_token、authorize、request_token_readyなどのAPIがありますが、サーバーがoAuth認証を行ってくれます。だから私の質問は、oAuthを使用してPythonでサーバーに接続する方法です(私のサーバーはoAuth1.0を使用しています)

詳細:サーバーがトークンとアクセストークンを要求しません。彼は鍵と秘密だけを使います。PythonでこのサーバーへのoAuth接続を実装するにはどうすればよいですか

4

4 に答える 4

28

これは、requests_oauthlibを使用した実際の例です。

from requests_oauthlib import OAuth1Session
test = OAuth1Session('consumer_key',
                    client_secret='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
url = 'https://one-legged-ouath.example.com/username/test'
r = test.get(url)
print r.content

これは古い質問ですが、受け入れられた回答は実際には彼の質問に対応していません。OPが指摘しているように、どの例もキーとシークレットのsansトークンの使用に関係していないためです。

私が理解しているものを使用しているように聞こえますが、OAuth 1.0a(One Leg)と呼ばれていますが、OAuth1.0aTwo-leggedと呼ばれることもあります。

私はこれをテストしていませんが、ここにかなり良い例があるようです:

https://github.com/CarmaSys/CarmaLinkAPI/wiki/Authentication-&-Permissions

ここに別の良い例があります:

https://stackoverflow.com/a/12710408/2599534

于 2016-07-29T01:20:18.080 に答える
3

サーバーに接続するためのクライアントを探している場合は、rauthをお勧めします。OAuth 1.0/aと2.0の両方を示す例がいくつかあります。

于 2013-03-28T22:36:09.163 に答える
3

romanがすでに言ったように、これは古い質問ですが、OAuth 1.0a(One Leg)で保護されたAPIがまだいくつかあります。今日、私はそのようなAPIにアクセスするための実用的なソリューションを見つけるために数時間を費やしました。

次の解決策が同様の課題に直面するのに役立つことを願っています。

私の解決策は、ローマンの答えに基づいています。@romanに感謝します!!

アクセスしたいAPIのデフォルトの応答はXMLであったため、リクエストヘッダーを設定する方法が必要でした。方法を知っていれば、実際に行うのは非常に簡単です。

from requests_oauthlib import OAuth1Session

CONSUMER_KEY = ""
CONSUMER_SECRET = ""

host = "rest.host.de"
uri = "/restapi/api/search/v1.0/statistic?geocode=1276001039"

oauthRequest = OAuth1Session(CONSUMER_KEY,
                    client_secret=CONSUMER_SECRET)

url = 'https://' + host + uri

headers = {
        'Accept': "application/json",
        'Accept-Encoding': "gzip, deflate",
    }

response = oauthRequest.get(url, headers=headers)

print(response.status_code)
print(response.content)
于 2020-03-25T16:02:34.227 に答える
0

このOAuth1.0a(片足)の例にPOXポストボディを追加します。これは、「Plain OldXML」(POX)本体を使用した要求/投稿/応答を使用した簡単な例です。

from requests_oauthlib import OAuth1Session
   
CONSUMER_KEY = "xxxxxxx"
CONSUMER_SECRET = "xxxxxxx"

ourSession = OAuth1Session(CONSUMER_KEY, client_secret=CONSUMER_SECRET, force_include_body=True)

body= '<?xml version="1.0" encoding="UTF-8"?>' \
   '<POXEnvelopeRequest xmlns="http://whateve">' \
   '<POXHeader>' \
   ' <RequestHeaderInfo>' \
      .   .   .   .
   ' </RequestHeaderInfo>' \
   '</POXHeader>'   \
   '</POXEnvelopeRequest>'

clen = str(len(body))

headers = {
 'Accept': '*/*',
 'Accept-Encoding': 'gzip, deflate, br',
 'Host': 'X.Y.com',
 'Content-Type': 'application/xml',
 'Connection': 'keep-alive',
 'Content-Length': clen
}

r = ourSession.post(url, headers=headers, data=body, verify=False)

# DEBUG: Comment out in and out as needed... 
print("===================== B E G I N    R E S P O N S E =======================\n")
print(r)
print(r.text)
print("===================== E N D    of  R E S P O N S E =======================\n")

[python] [oAuth1.0a] [one-legged] [two-legged]

于 2021-12-26T07:09:19.357 に答える