Responsive image

keoki - 2021-11-27 21:32 [GF]
相关帖子:

https://bbs.south-plus.org/read.php?tid-1142421-keyword-recurbate.html

https://bbs.south-plus.org/read.php?tid-1189165-keyword-recurbate.html


recurbate 好象是最全最新的 chaturbate 录播站了吧, 看样子是毛子开的 (网站会请求 Yandex.Metrica 的广告文件),会员很贵,20刀一个月。

recurbate.com 域名套了 cloudflare CDN, 媒体文件服务器地址在欧洲国家,比如荷兰和德国。

网站对游客的限制是同时基于 ip 和 cookies, 每个 ip 每天只能请求一个视频文件的地址。



注册免费帐号现在每天限制是一个视频都不能看,所以还不如游客状态。

游客状态下,打开一个视频,点击播放按钮。 浏览器会尝试请求这个地址,"/api/get.php?video=" + id + "&token=" + token , 如果服务器判断你是游客而且 ip 今日已经请求过了,会返回 shall_signin, 然后页面会跳转到登录页面 “/signin?url=”。

如果请求成功视频文件地址会在返回的请求数据 data 里,文件地址大概长这样:

复制代码
  1. https://f15.mediafront.xyz/micu_ko/2021-11-16,16-51.mp4?md5=aYserSak4jkon6nsDbgJaw&expires=1638002800&origin=105&mid=9ce06be3-5dec-45f9-946d-b3e1ca2ecaf5&akey=&p=2000


expires=1638002800 这个是时间戳,值是请求那一刻的时间, mid 是 recurbate.com 域名的某一个 cookie 键值,这个值应该对应了你的 ip 地址,md5=aYserSak4jkon6nsDbgJaw 应该是某个防止伪造的加密值, 估计只有服务器才知道怎么生成。

上面的文件地址是有时效的,10分钟以后这个地址就会返回 410 gone。 这个地址也只有你的 ip 地址才能够请求, 如果你用别的 ip 去请求 他会返回 403 forbidden。

所以你唯一能做的就是找一台网速快的机器, 每天请求一次, 在 10 分钟之内把这个文件下载完。 或者找一个能保证网速高而且稳定的机场,不停的切换节点清空 cookies, 文件服务器在欧洲,如果你下载的文件有 6g 大小, 那你要保证你的下载速度有 10M/s 才行。 而且机场的流量还必须充足,因为可能遇到下到快要完成但是超时的情况需要重新下载。


我的解决方案是写一个脚本,然后在美国的 vps 上运行,获取文件地址后下载, 如果你的机子还过得去, 那么请求欧洲地区的服务器网速应该还行还行, 10分钟下载一个视频没什么问题,下载好后然后在拉回本地。 因为手里有好几台 vps 放着吃灰,正好可以用上。

下面贴几个最近在看的主播,特别推荐第一个樱花妹,外表清纯可爱,玩跳蛋高潮的时候还会痉挛。






最后贴出下载脚本代码,只需要修改视频 id 号就行了:
复制代码

  1. import requests
    import re
    import sys

    s = requests.Session()

    header_data = """Host: recurbate.com
    User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: none"""
    lst2 = header_data.split("\n")

    lst_of_lst2 = [lst.split(": ") for lst in lst2]
    HEADERS = {lst[0]: lst[1] for lst in lst_of_lst2}


    def get_api_token(video_id):

        r = s.get(
            f"https://recurbate.com/play.php?video={video_id}", headers=HEADERS
        )
        r.encoding = r.apparent_encoding
        token = re.findall(r'data-token="(.*?)"', r.text)[0]
        print(token)
        return token


    def get_src(token):
        resp = s.get(
            f"https://recurbate.com/api/get.php?video={video_id}&token={token}",
            headers=HEADERS,
        )
        api_resptext = resp.text
        if "source" in api_resptext:
            src = re.findall(r'source src="(.*?)" type="video', api_resptext)[0]
            print("src: ", src)
            return src
        else:
            print("src not got: ", api_resptext)
            return None


    def fetch_file(src):

        file_headers_data = """Accept-Encoding: identity;q=1, *;q=0
    Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
    Connection: keep-alive
    DNT: 1
    Host: f18.mediafront.xyz
    Range: bytes=0-
    sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Linux"
    Sec-Fetch-Dest: video
    Sec-Fetch-Mode: no-cors
    Sec-Fetch-Site: cross-site
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"""

        lst3 = file_headers_data.split("\n")

        lst_of_lst3 = [lst.split(": ") for lst in lst3]
        # print(lst_of_lst2)
        file_headers = {lst[0]: lst[1] for lst in lst_of_lst3}

        response = requests.get(src, headers=file_headers, stream=True)
        print("status code", response.status_code)
        content_length_h = str(response.headers.get("content-length"))
        content_length = int(content_length_h)
        print("file size:", content_length // (1000000), "MB")
        file_path = "./download.mp4"
        with open(file_path, "wb") as file:
            # start downloading
            dl = 0
            for data in response.iter_content(chunk_size=8192):
                dl += len(data)
                file.write(data)
                done = int(50 * dl / content_length)
                sys.stdout.write(
                    "\r[%s%s] %s"
                    % ("=" * done, " " * (50 - done), str(dl // 1000000) + "MB")
                )
                sys.stdout.flush()


    video_id = 10654230

    token = get_api_token(video_id)
    if src := get_src(token):
        fetch_file(src)



cf2dbb33 - 2021-11-27 21:40 [B1F]
看不懂 但mark一下


4a84107b - 2021-11-27 21:43 [B2F]
第一个妹子确实不错,可惜直播的特点就是得参与,不然乐趣减半。


hzw654 - 2021-11-27 21:44 [B3F]
  


edward2012751 - 2021-11-27 21:44 [B4F]
mark~~
技术大佬拯救世界


potralfire - 2021-11-27 23:28 [B5F]
chaturbate 怎么打赏主播?


坂本 - 2021-11-28 10:01 [B6F]


JUSTwe - 2021-11-28 12:58 [B7F]
膜拜技术大佬


问题君 - 2021-11-28 17:08 [B8F]
测试后, 改了video_id就提示错误
dfd08669b5ecbb6cc8ec614138b31bdd8e9b787b9290a0188c988714cdd7c3e5
src not got:  shall_signin

------------------------------------
经过几次重试, 啥也没动, 又能下载了, 好奇怪啊


keoki - 2021-11-28 21:46 [B9F]
shall_signin 就说明你今日的一次机会已经用完了,要记得本地跑需要挂梯子


问题君 - 2021-11-29 08:00 [B10F]


毒杰 - 2021-11-29 09:11 [B11F]
  


橙子 - 2021-11-29 09:14 [B12F]


狂想 - 2021-11-29 09:16 [B13F]
这得mark一下


pplgg - 2021-11-29 09:17 [B14F]
mark


少年王 - 2021-11-29 09:50 [B15F]
ghs是最大的力量


MaryStrong - 2021-11-29 09:59 [B16F]
看不懂,但大为震撼
另外以前经常看Amy_murr的直播,很喜欢她,但好像好久没播了


雪中情 - 2021-11-29 10:08 [B17F]
我连搞黄色都跟不上时代了吗?


宣景 - 2021-11-29 10:34 [B18F]
大佬


iyoooo - 2021-11-29 10:39 [B19F]
看不懂,好厉害


7f3ce8f0 - 2021-11-29 19:08 [B20F]
换号直播了现在叫ameetea


渡鸦2333 - 2021-11-29 21:27 [B21F]
厉害,南+难得碰到cb同好


站着拉屎 - 2021-12-27 21:44 [B22F]
大佬可以帮忙扒一下这个视频吗https://recurbate.cc/play.php?video=9101254


小莎莎 - 2021-12-27 21:51 [B23F]
这么专业


文公团与福利姬 - 2021-12-28 03:06 [B24F]
50以内一个月都能接受


过来叫爸爸 - 2021-12-28 07:32 [B25F]
牛逼牛逼,马克一下


Blakcie - 2021-12-28 07:37 [B26F]
  


エロ大叔 - 2021-12-28 09:30 [B27F]
膜拜大佬


kirei - 2021-12-28 09:33 [B28F]
mark


BM12138 - 2021-12-28 14:07 [B29F]
学习了


e52aa767 - 2021-12-28 15:02 [B30F]
mark






桌面版


Powered by SP Project v1.0 © 2010-2019
Time 0.002466 second(s),query:3 Gzip enabled


Top