我读了answer的问题:
“如何使用Python的Requests模块”登录“网站?”
答案是:
“首先检查登录表单的来源以获取三条信息 – 表单发布到的URL,以及用户名和密码字段的名称属性.”
我有以下代码:
import requests
url = 'http://www.morningstar.com/members/login.html'
url = 'http://beta.morningstar.com'
with open('morningstar.txt') as f:
username, password = f.read().splitlines()
with requests.Session() as s:
payload = login_data = {
'username': username,
'password': password,
}
p = s.post(url, data=login_data)
print(p.text)
但 – 除其他外 – 它打印:
This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests.
该帖子的网址和数据应该是什么?
还有另一个使用硒的answer,但有可能避免这种情况吗?
解决方法:
这有点难,我不得不使用拦截代理,但这里是:
import requests
s = requests.session()
auth_url = 'https://sso.morningstar.com/sso/json/msusers/authenticate'
login_url = 'https://www.morningstar.com/api/v2/user/login'
username = 'username'
password = 'password'
headers = {
'Access-Control-Request-Method': 'POST',
'Access-Control-Request-Headers': 'content-type,x-openam-password,x-openam-username',
'Origin': 'https://www.morningstar.com'
}
s.options(auth_url, headers=headers)
headers = {
'Referer': 'https://www.morningstar.com/members/login.html',
'Content-Type': 'application/json',
'X-OpenAM-Username': username,
'X-OpenAM-Password': password,
'Origin': 'https://www.morningstar.com',
}
s.post(auth_url, headers=headers)
data = {"productCode":"DOT_COM","rememberMe":False}
r = s.post(login_url, json=data)
print(s.cookies)
print(r.json())
到目前为止,您应该进行经过身份验证的会话您应该在s.cookies中看到一堆cookie,并在r.json()中看到有关您帐户的一些基本信息.
标签:python,python-3-x,post,python-requests,get