我正在尝试登录一个名为grailed.com的网站并关注某种产品。下面的代码是我尝试过的。
下面的代码使用我的凭据成功登录。但是,每当我尝试关注产品时(有效负载中的ID就是产品的ID),代码就会运行,没有任何错误,但无法关注产品。我对此行为感到困惑。是否与Instagram类似(Instagram阻止了任何以编程方式与他们的网站进行交互并强迫您使用其API的尝试(grailed.com没有让公众使用AFAIK的API)
我尝试了以下代码(看起来就像您在网站上关注时发送的POST请求一样。)
headers/data defined here
r = requests.Session()
v = r.post("https://www.grailed.com/api/sign_in", json=data,headers = headers)
headers = {
'authority': 'www.grailed.com',
'method': 'POST',
"path": "/api/follows",
'scheme': 'https',
'accept': 'application/json',
'accept-encoding': 'gzip, deflate, br',
"content-type": "application/json",
"x-amplitude-id": "1547853919085",
"x-api-version": "application/grailed.api.v1",
"x-csrf-token": "9ph4VotTqyOBQzcUt8c3C5tJrFV7VlT9U5XrXdbt9/8G8I14mGllOMNGqGNYlkES/Z8OLfffIEJeRv9qydISIw==",
"origin": "https://www.grailed.com",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
payload = {
"id": "7917017"
}
b = r.post("https://www.grailed.com/api/follows",json = payload,headers = headers)
答案 0 :(得分:2)
如果API并非设计为公开的,则很可能在关注标头中缺少csrf令牌。
您必须找到一个CSRF令牌,并将其添加到/api/follows
POST中。
快速查看代码,因为一切都在javascript中进行,所以这可能很难。