2017-05-14 10 views
2

ニュースソース "SNL Finance"からコンテンツを取得しようとすると、私は壁に向かって頭を上げています。私は正当な資格情報を持っているので、理論的にはニュースコンテンツにプログラムでアクセスできるはずです。要するにPythonからOAUTHウェブサイトのコンテンツにアクセスするためのリクエスト - SNL Finance

、私は以下のスクリプトを実行しようとしたが、成功しませんしました:悲しいこと

s = requests.Session() 

client_id = "..." 
client_secret = "..." 
token_url = "https://www.snl.com/SNL.Services.Security.Service/oauth/token" 
protected_url = "https://www.snl.com/web/client?auth=inherit#news/article?id=40666532&KeyProductLinkType=14" 

request_data = { 
    "client_id": client_id, 
    "client_secret": client_secret, 
    "scope": "https://www.snl.com", 
    "grant_type": "refresh_token", 
    "refresh_token": refresh_token 
} 

token_response = s.post(token_url, data=request_data) 
### token response is in jwt format, including token_type, expires_in, scope, etc. ### 
token = json.loads(token_response.text)["access_token"].split('>')[1].split('<')[0] 
request_data["token"] = token 

article = s.post(protected_url, headers=request_data) 

、これは失敗します。私は200レスポンスで終わるが、ログインページ(正直なところ、私が何を見ているのか完全にはわからない)のように見える。

/web/client?auth=inherit&contextType=external&username=string&enablePersistentLogin=true&OverrideRetryLimit=0&SwitchGetToPostLimit=50000&contextValue=%2Foam&password=secure_string&challenge_url=https%3A%2F%2Fwww.snl.com%2Fweb%2Fclient%3Fauth%3Dinherit&request_id=-6149669210818920852&authn_try_count=0&locale=en_US&resource_url=https%253A%252F%252Fwww.snl.com%252FInteractiveX%252FDefault.aspx%253Ftarget%253Dnews%25252Farticle%25253Fid%25253D40666532%252526KeyProductLinkType%25253D14%2526SNL3%253D1 
:以下のURL(省略SNLベース)にリダイレクト保護されたURLを、訪問する

  1. 試み:それは、認証プロセス全体を通じて移入よう

    は、より多くの背景については、私は、ブラウザ情報を含めました

リクエストヘッダーは、hereです。

  1. ログイン/パスワードを入力すると、トークンが取得され、保護されたページが読み込まれます。

リクエストクッキーは、hereと表示されています。

また、上記のlink (second link)のトークン値SNL_OAUTH_TOKENが、私のスクリプトから受け取ったjwtトークンレスポンスに示されているものと異なるのは、ちょっと混乱しています。

ここでのガイダンスは非常に高く評価されます。また、私が有用であると証明する他の非個人情報を送信しても大丈夫です。

ありがとうございました!

答えて

0

私はこれを理解し終わった。私はPythonのリクエストライブラリを過小評価しました。

このように簡単であるように思われる:

# prep token request data 
request_data = { 
    "client_id": client_id, 
    "client_secret": client_secret, 
    "scope": "https://www.snl.com", 
    "grant_type": "refresh_token", 
    "refresh_token": new_refresh_token 
} 

# post to token url with token credentials 
# the request object stores the token response cookies 
r1 = requests.post(token_url, data=request_data) 

# post to protected url by setting cookies arg as cookies from previous response 
r2 = requests.post(protected_url, cookies=r1.cookies) 
+0

のOAuthクライアントライブラリの多くは、要求能力は、あなたがかもしれhttps://github.com/requests/requests-oauthlibある拡張1があります。チェックアウトしたい – Smit

関連する問題