Python请求POST方法响应中的意外内容
我试图在网页Python请求POST方法响应中的意外内容,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,我试图在网页https://www.meo.pt/tv/canais-programacao/guia-tv使用Python请求。我经常使用这个模块,但主要是GET方法。但是,此请求正在使用POST。每次向下滚动页面时,都会向下面的API发送一个请求,使用这些参数将其他程序数据加载到页面: import requests #post request url = 'https://www.meo.pt/_layouts/15/Ptsi.Isites.GridTv/GridTvMng.asmx/g
https://www.meo.pt/tv/canais-programacao/guia-tv
使用Python请求。我经常使用这个模块,但主要是GET
方法。但是,此请求正在使用POST
。每次向下滚动页面时,都会向下面的API发送一个请求,使用这些参数将其他程序数据加载到页面:
import requests
#post request
url = 'https://www.meo.pt/_layouts/15/Ptsi.Isites.GridTv/GridTvMng.asmx/getProgramsFromChannels'
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
'Connection': 'keep-alive',
'Content-Length': '214',
'Content-type': 'application/json; charset=UTF-8',
'Host': 'www.meo.pt',
'Origin': 'https://www.meo.pt',
'Referer': 'https://www.meo.pt/tv/canais-programacao/guia-tv',
'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
'X-KL-Ajax-Request': 'Ajax_Request'
}
data = {"service":"channelsguide",
"channels":["LVTV","TOROTV","CAÇAP","CAÇAV","RTPACRS","CLUBB","MCM T","TRACE","24KITC","E!"],
"dateStart":"2021-04-20T23:00:00.000Z",
"dateEnd":"2021-04-21T23:00:00.000Z",
"accountID":""}
r = requests.post(url=url, headers=headers, data=data)
print(r.text)
我已经尝试了这个请求,无论是否使用了标题,因为我不知道POST
请求是否需要它们。但是,这两个选项都没有返回我所期望的结果,即一个包含这些通道的程序数据的JSON对象
我做错了什么?您可以使用此示例来说明如何将json数据发布到API Url:
import json
import requests
url = "https://www.meo.pt/_layouts/15/Ptsi.Isites.GridTv/GridTvMng.asmx/getProgramsFromChannels"
payload = {
"accountID": "",
"channels": [
"SCPHD",
"EURHD",
"EURS2HD",
"DISNY",
"CART",
"BIGGS",
"SICK",
"NICKELO",
"DISNYJ",
"PANDA",
],
"dateEnd": "2021-04-21T22:00:00.000Z",
"dateStart": "2021-04-20T22:00:00.000Z",
"service": "channelsguide",
}
data = requests.post(url, json=payload).json()
# pretty print the data:
print(json.dumps(data, indent=4))
印刷品:
{
“d”:{
“_类型”:“Ptsi.Isites.GridTv.CanaisService.GridTv”,
“扩展数据”:{},
“服务”:[],
“频道”:[
{
“_类型”:“Ptsi.Isites.GridTv.CanaisService.Channels”,
“扩展数据”:{},
“id”:36,
“名称”:“运动电视高清”,
“西格拉”:“SCPHD”,
“friendlyUrlName”:“运动电视高清”,
“url”:”https://meogo.meo.pt/direto?canalUrl=Sporting_TV_HD",
“meogo”:没错,
“徽标”:https://www.meo.pt/PublishingImages/canais/sporting-tv-hd.png",
“isAdult”:错误,
“类别”:[
{
“扩展数据”:{},
“id”:2,
“名称”:“Desporto”
}
],
...
考虑在请求函数中使用json
参数,而不是data
。在发送原始字典时,json
参数将正文解析为json格式
data = {"service":"channelsguide",
"channels":["LVTV","TOROTV","CAÇAP","CAÇAV","RTPACRS","CLUBB","MCM T","TRACE","24KITC","E!"],
"dateStart":"2021-04-20T23:00:00.000Z",
"dateEnd":"2021-04-21T23:00:00.000Z",
"accountID":""}
r = requests.post(url=url, headers=headers, json=data)
如果您想继续使用data
参数,您应该将数据字典解析为JSON,以发送正确的正文格式
若你们想继续使用数据参数,你们应该解析数据
字典到JSON以发送正确的正文格式
您应该将标题设置为:
headers = {
'Content-type': 'application/json'
}
完整代码为:
import json
import requests
url = "https://www.meo.pt/_layouts/15/Ptsi.Isites.GridTv/GridTvMng.asmx/getProgramsFromChannels"
headers = {
'Content-type': 'application/json'
}
payload = {
"accountID": "",
"channels": [
"SCPHD",
"EURHD",
"EURS2HD",
"DISNY",
"CART",
"BIGGS",
"SICK",
"NICKELO",
"DISNYJ",
"PANDA",
],
"dateEnd": "2021-04-21T22:00:00.000Z",
"dateStart": "2021-04-20T22:00:00.000Z",
"service": "channelsguide",
}
resp = requests.post(url,headers=headers,data=json.dumps(payload))
print(resp.text)