python requests添加hyper HTTP2特性之后报400错误

发布于 2022-09-06 07:32:03 字数 4682 浏览 15 评论 0

python requests添加hyper HTTP2特性之后报400错误
Bad Request (Invalid Header Name)
我想要模拟浏览器的这个请求:

clipboard.png
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技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

简单 2022-09-13 07:32:03

土一点的办法,直接用下面的方式播放就行了

<iframe id="WANG" scrolling="no" allowtransparency="true" frameborder="0"
                src="http://api.wlzhan.com/sudu/?url=http://www.iqiyi.com/v_19rre5iyo8.html"
                width="100%" height="100%" style="background: #000000;"></iframe>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文