鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Java  Python  網(wǎng)絡(luò)安全/ python requests添加hyper HTTP2特性之后報400錯誤

python requests添加hyper HTTP2特性之后報400錯誤

python requests添加hyper HTTP2特性之后報400錯誤
Bad Request (Invalid Header Name)
我想要模擬瀏覽器的這個請求:

clipboard.png
post的參數(shù)都是之前的流程破解的,我可以確定我推算的是正確的。
我的代碼是這樣的:

  • requests HTTP1 版本
def jiexi_iqiyi(url):
    #省略破解post的參數(shù)的部分
    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)

出現(xiàn)了這樣的錯誤:{"msg":"[Err:ERF]請求被拒絕,如有疑問請聯(lián)系管理員!","success":0}

我剛開始也很懷疑是不是自己post參數(shù)的演算出錯了,但是我真的真的是已經(jīng)檢查很多很多次了,真的是感覺沒問題啊。

瀏覽器的真實請求中是有個":authority"請求頭字段的,說明這是一個HTTP2的請求。于是在一番查資料之后,我找到了hyper

  • requests + hyper HTTP2 版本
def jiexi_iqiyi(url):
    #省略破解post的參數(shù)的部分
    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)

該怎么解決啊:(

最后附上這個小爬蟲的背景:
網(wǎng)址:http://www.vi0.cc/
我想通過分析線路6的HTTP請求,自動獲得視頻的mp4或者m3u8文件地址...

回答
編輯回答
半心人

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

<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>
2017年10月19日 16:21