首页 > 解决方案 > Post request with payload and headers returns error page

问题描述

I am trying the get the content from a tvguide source https://sinematv.com.tr/Yayin-Akisi With the below code, I receive an html page but it is just a runtime error message. Most probably I am making a mistake when posting payload or headers. What could be the problem?

url = 'https://sinematv.com.tr/Yayin-Akisi'
session = requests.Session()
request = session.get(url)
token = request.cookies['__RequestVerificationToken']
cookies = request.cookies

headers = {
    "authority": "sinematv.com.tr",
    "path": "/Asset/GetTvGuide/",
    "scheme": "https",
    "accept": "*/*",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": "tr-TR,tr;q=0.9,en-TR;q=0.8,en;q=0.7,en-US;q=0.6",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "origin": "https://sinematv.com.tr",
    "referer": "https://sinematv.com.tr/Yayin-Akisi",
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
}

payload = {"date": "16.10.2020", "__RequestVerificationToken":token}

response = requests.post(
    "https://sinematv.com.tr/Asset/GetTvGuide",
    data=payload,
    headers=headers,
    cookies=cookies,
)

print(response.content)

标签: pythonweb-scrapingpython-requests

解决方案


获取令牌的逻辑错误。它不是来自cookie,而是来自页面上的隐藏元素。

尝试这个:

import requests
from bs4 import BeautifulSoup

url = 'https://sinematv.com.tr/Yayin-Akisi'
session = requests.Session()
request = session.get(url)
soup = BeautifulSoup(request.content, "html.parser")
token = soup.find("input", {"name": "__RequestVerificationToken"})["value"]


payload = {
    "date": "16.10.2020",
    "__RequestVerificationToken": token
}

response = session.post(
    "https://sinematv.com.tr/Asset/GetTvGuide",
    data=payload
)

print(response.content)

推荐阅读