我一直在想办法从新闻源“ 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响应,但它似乎只是登录页面(老实说,我不确定自己在看什么)。

为了获得更多背景知识,我在整个身份验证过程中都包含了浏览器信息:


尝试访问受保护的网址,重定向到以下网址(省略的snl基本):

/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



请求标头显示为here


输入登录名/密码后,将检索令牌并加载受保护的页面。


请求cookie如here所示。

另外,对于为什么link (second link)SNL_OAUTH_TOKEN的令牌值与我从脚本收到的jwt令牌响应中显示的值不同,我有些困惑。

这里的任何指导将不胜感激。我也很乐意发送任何其他有用的非个人信息。

谢谢!

最佳答案

我最终弄清楚了这一点。我低估了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)

关于python - Python请求访问OAUTH网站内容-SNL财经,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43965495/

10-13 02:24