POST请求无法与网站互动

时间:2019-01-19 00:13:37

标签: python python-3.x beautifulsoup python-requests

我正在尝试登录一个名为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)

1 个答案:

答案 0 :(得分:2)

如果API并非设计为公开的,则很可能在关注标头中缺少csrf令牌。 您必须找到一个CSRF令牌,并将其添加到/api/follows POST中。 快速查看代码,因为一切都在javascript中进行,所以这可能很难。