python requests添加hyper HTTP2特性之后报400错误
python requests添加hyper HTTP2特性之后报400错误
Bad Request (Invalid Header Name)
我想要模拟浏览器的这个请求:
post的参数都是之前的流程破解的,我可以确定我推算的是正确的。
我的代码是这样的:
- requests HTTP1 版本
def jiexi_iqiyi(url):
#省略破解post的参数的部分
get_m3u8_api = "https://api.47ks.com/config/webmain.php"
data = {
"k": k,
"k2": k2,
"ep": ep,
"cip": cip,
"cip_hex": cip_hex,
"csign": csign,
"tm": tm,
"v": v,
"pt": pt,
"nip": nip,
"from": from_,
"mode": mode
}
data_string = ''
for key, value in data.items():
data_string += key + "=" + value.replace("?", "%3F").replace("/", "%2F").replace("%2B", "%252B").replace(":","%3A") + "&"
data_string = data_string[0:-1]
content_length = len(data_string)
headers = {
"accept" : "application/json, text/javascript, */*; q=0.01",
"accept-encoding" : "gzip, deflate, br",
"accept-language" : "zh-CN,zh;q=0.8",
"cache-control" : "no-cache",
"content-length" : str(content_length),
"content-type" : "application/x-www-form-urlencoded; charset=UTF-8",
"cookie" : "47KS_uuid=0ba0439b-56a4-98d7-f974-33a023914016; 47KS_upid=d3JJeXlSdDA5QmRFVF9sUjNkY2pZbVlicWZxdGF5dzNBV2UwYkhXRDFRRTYvM3diMFhIN0hVVHBsazY3VTJUMmhLWTU1Y2VDdDFnTE8yeGpTVnFvVUltUWkvRUQwcTd2TDFpb2wyeWI3RU0vUnBoMXkzdmJmQk0%3D; UM_distinctid=160300441d91e7-0694eb159e8a5-7910717d-1fa400-160300441da117; yd_srvbl=7a0951e72b6b3906e732575bc0dda444; CNZZDATA1260594368=1355421933-1512629667-null%7C1512651272",
"origin" : "https://api.47ks.com",
"pragma" : "no-cache",
"referer" : "https://api.47ks.com/webcloud/?v="+url,
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4399.400 QQBrowser/9.7.12777.400",
"x-requested-with" : "XMLHttpRequest",
}
r = requests.post(get_m3u8_api,data=data,headers=headers)
出现了这样的错误:{"msg":"[Err:ERF]请求被拒绝,如有疑问请联系管理员!","success":0}
我刚开始也很怀疑是不是自己post参数的演算出错了,但是我真的真的是已经检查很多很多次了,真的是感觉没问题啊。
浏览器的真实请求中是有个":authority"请求头字段的,说明这是一个HTTP2的请求。于是在一番查资料之后,我找到了hyper
- requests + hyper HTTP2 版本
def jiexi_iqiyi(url):
#省略破解post的参数的部分
get_m3u8_api = "https://api.47ks.com/config/webmain.php"
data = {
"k": k,
"k2": k2,
"ep": ep,
"cip": cip,
"cip_hex": cip_hex,
"csign": csign,
"tm": tm,
"v": v,
"pt": pt,
"nip": nip,
"from": from_,
"mode": mode
}
data_string = ''
for key, value in data.items():
data_string += key + "=" + value.replace("?", "%3F").replace("/", "%2F").replace("%2B", "%252B").replace(":","%3A") + "&"
data_string = data_string[0:-1]
content_length = len(data_string)
headers = {
":authority" : "api.47ks.com",
":method" : "POST",
":path" : "/config/webmain.php",
":scheme" : "https",
"accept" : "application/json, text/javascript, */*; q=0.01",
"accept-encoding" : "gzip, deflate, br",
"accept-language" : "zh-CN,zh;q=0.8",
"cache-control" : "no-cache",
"content-length" : str(content_length),
"content-type" : "application/x-www-form-urlencoded; charset=UTF-8",
"cookie" : "47KS_uuid=0ba0439b-56a4-98d7-f974-33a023914016; 47KS_upid=d3JJeXlSdDA5QmRFVF9sUjNkY2pZbVlicWZxdGF5dzNBV2UwYkhXRDFRRTYvM3diMFhIN0hVVHBsazY3VTJUMmhLWTU1Y2VDdDFnTE8yeGpTVnFvVUltUWkvRUQwcTd2TDFpb2wyeWI3RU0vUnBoMXkzdmJmQk0%3D; UM_distinctid=160300441d91e7-0694eb159e8a5-7910717d-1fa400-160300441da117; yd_srvbl=7a0951e72b6b3906e732575bc0dda444; CNZZDATA1260594368=1355421933-1512629667-null%7C1512651272",
"origin" : "https://api.47ks.com",
"pragma" : "no-cache",
"referer" : "https://api.47ks.com/webcloud/?v="+url,
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4399.400 QQBrowser/9.7.12777.400",
"x-requested-with" : "XMLHttpRequest",
}
s = requests.Session()
s.mount("https://api.47ks.com/", HTTP20Adapter())
r = s.post(get_m3u8_api, data=data,headers=headers)
程序报错:
Bad Requests (Invalid Header Name)
该怎么解决啊:(
最后附上这个小爬虫的背景:
网址:http://www.vi0.cc/
我想通过分析线路6的HTTP请求,自动获得视频的mp4或者m3u8文件地址...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
土一点的办法,直接用下面的方式播放就行了