Johnserf-Seed / TikTokDownload

抖音去水印批量下载用户主页作品、喜欢、收藏、图文、音频
https://github.com/Johnserf-Seed/f2
MIT License
6.59k stars 1.27k forks source link

[BUG] 想更改代码实现关注功能 #319

Closed ShiinaRinne closed 1 year ago

ShiinaRinne commented 1 year ago

可能是个与repo并没有关系的issue...恳请赐教

描述出现的错误 https://www.douyin.com/aweme/v1/web/commit/follow/user/? 对此接口发送请求,返回值为200,但是没有任何返回信息(response.text)

bug复现 复现这次行为的步骤:

  1. 使用Util.XBogus调用这段参数生成XBogus,来源于关注和取消关注的接口。其中msToken直接复制和随机生成都尝试过。

    device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=71xxxxxxxxxxxxxxxxx3666&msToken={Util.generate_random_str(107)}`

  2. 修改headers,添加CookieContent-Type等,cookie从请求中直接复制

  3. 拼接参数发起请求,下面是最终请求的url

    https://www.douyin.com/aweme/v1/web/commit/follow/user/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7198928548617733666&msToken=yAk0N6Utra5uMM5s4XqUgX0HWxxxxxxxxxxxxxxg1ZhOmsG2dR1izWS3pNYZa51MHFAEuDHHrRGVlnnafXXhsu9nfT1VreEBlfwlXrWo22RM&X-Bogus=DFSzswVuDNvANxXhShJiDF9WX7rG

会得到一个没有返回信息的结果。学艺不精,不清楚是生成XBogus时提供的参数有误,还是其他问题导致 image

网页端的请求在payload页被分为查询字符串参数和表单数据,表单数据拼接到url中或用json形式发送也都尝试过 image

截图 image image image

一个关注动作似乎被分到了三个api,第一个疑似是获取impr_id,第二个和第三个通过在params中的impr_idto_user_id完成关注

桌面(请填写以下信息): -操作系统:windows10 64bit -vpn代理:关闭 -版本:latest

附文 在此处添加有关此问题的文字。

Johnserf-Seed commented 1 year ago

你漏了一个最重要的headers参数哦,referer要修改成https://www.douyin.com/user/self 详情看我发布的接口文档 https://langyue.cc/APIdocV1.0.html 里面列出了大部分接口所需要的参数和headers,如果有误还请提交issues

Johnserf-Seed commented 1 year ago

添加上正确的referer就可以正常获取了 image

boluohong commented 1 year ago

添加上正确的referer就可以正常获取了 image

请问TikTokLive的失效也是因为referer吗???

ShiinaRinne commented 1 year ago

关注用户的api是https://www.douyin.com/aweme/v1/web/commit/follow/user/?,接口文档中似乎没有这个API的介绍。

我从关注请求里直接复制了url(包括XBogus),现在有正常返回信息了 image image

不加referer的情况下会提示blocked,当referer是https://www.douyin.com/时候也有正常的返回结果。反而是我自行更改XBogus参数之后才会什么都没有,我的问题应该是调用API生成XBogus参数时出错了

Johnserf-Seed commented 1 year ago

有些接口三个一个也不能少,另外xg如果出错页面是完全空白的 blocked的情况是xg过期了,但是现在抖音延长了xg的生命周期 也就是xg不再是用过就过期

ShiinaRinne commented 1 year ago

有些接口三个一个也不能少,另外xg如果出错页面是完全空白的 blocked的情况是xg过期了,但是现在抖音延长了xg的生命周期 也就是xg不再是用过就过期

对,我现在的情况就是页面完全空白xd 我试试直接用原请求中的参数生成一个xg拼接起来

ShiinaRinne commented 1 year ago

空白了.jpg image 函数中的参数是直接从原本请求中剔除api和xg参数部分,全复制进去的

Johnserf-Seed commented 1 year ago

image

cookie需要 sessionid_ss;msToken;odin_tt; referer需要对应 user-agent浏览器默认 就可以请求成功了

Johnserf-Seed commented 1 year ago

你得再多测试几个参数

ShiinaRinne commented 1 year ago
import Util

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
    'referer':'https://www.douyin.com/user/MS4wLjABAAAAFYFDSTF8VBtSOaVAl1ex8VorboYs0neWnYScMa9CdTM',
    'Cookie': '',
    "Content-Type": "application/x-www-form-urlencoded"
}

url = "https://www.douyin.com/aweme/v1/web/commit/follow/user/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7198928548617733666&msToken=ddgW0IBqBMWOoFEIz8Cp6pwd65E5NrTmnZXu95YSYY1Y6BlRSFRRqf9pcwxPhUKzvUnOnz1xqvj7FPOB00g-7wkPYIY-LA347vCNujfZSkEAb00W9M9jz-geLOcgKoXB&X-Bogus=DFSzswVuMhg8s40zShjdSENSwbuY"
payload = {'type': '1', 'user_id': '62706123686'}

datas = Util.XBogus('device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7198928548617733666&msToken=ddgW0IBqBMWOoFEIz8Cp6pwd65E5NrTmnZXu95YSYY1Y6BlRSFRRqf9pcwxPhUKzvUnOnz1xqvj7FPOB00g-7wkPYIY-LA347vCNujfZSkEAb00W9M9jz-geLOcgKoXB' )

api_follow_url = f'https://www.douyin.com/aweme/v1/web/commit/follow/user/?{datas.params}'

r = Util.requests.post(url=api_follow_url, headers=headers, data=payload)
print(r.text)
print(r.status_code)

确实是不行,是因为api差异吗?我使用的这个是关注用户的动作的api,不是获取用户的关注列表

Johnserf-Seed commented 1 year ago

不是因为api差异,是你headers的问题

Johnserf-Seed commented 1 year ago

cookie: xxxxx referrer: https://www.douyin.com/ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41 x-secsdk-csrf-token: xxxxx

boluohong commented 1 year ago

cookie: xxxxx referrer: https://www.douyin.com/ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41 x-secsdk-csrf-token: xxxxx

大佬大佬,顺便求问一下那个TikTokLive的bug也是因为headers吗

Johnserf-Seed commented 1 year ago

cookie: xxxxx referrer: https://www.douyin.com/ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41 x-secsdk-csrf-token: xxxxx

大佬大佬,顺便求问一下那个TikTokLive的bug也是因为headers吗

不是😂 单纯是没把live的接口加xg 因为之前还能用 侥幸心理 没想到后面也挂了

Johnserf-Seed commented 1 year ago

加上xg就能用了

ShiinaRinne commented 1 year ago

image

Johnserf-Seed commented 1 year ago

image

image 不忍打破

Johnserf-Seed commented 1 year ago

image

你应该是漏了msToken,生成xg也要带上的

ShiinaRinne commented 1 year ago

image mstoken在cookie、原本链接和请求xg的方法里也都有 (毕竟是直接从网络请求里复制过来的) 虽然cookie中有两个,还的和请求中的不一样... postman确实可以正常使用

是这段代码里Util.XBogus中的参数有限制吗,出问题应该就只是在这里了

import Util

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
    'referer':'https://www.douyin.com/user/MS4wLjABAAAAFYFDSTF8VBtSOaVAl1ex8VorboYs0neWnYScMa9CdTM',
    'Cookie': '',
    "Content-Type": "application/x-www-form-urlencoded"
}

url = "https://www.douyin.com/aweme/v1/web/commit/follow/user/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7198928548617733666&msToken=ddgW0IBqBMWOoFEIz8Cp6pwd65E5NrTmnZXu95YSYY1Y6BlRSFRRqf9pcwxPhUKzvUnOnz1xqvj7FPOB00g-7wkPYIY-LA347vCNujfZSkEAb00W9M9jz-geLOcgKoXB&X-Bogus=DFSzswVuMhg8s40zShjdSENSwbuY"
payload = {'type': '1', 'user_id': '62706123686'}

datas = Util.XBogus('device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7198928548617733666&msToken=ddgW0IBqBMWOoFEIz8Cp6pwd65E5NrTmnZXu95YSYY1Y6BlRSFRRqf9pcwxPhUKzvUnOnz1xqvj7FPOB00g-7wkPYIY-LA347vCNujfZSkEAb00W9M9jz-geLOcgKoXB' )

api_follow_url = f'https://www.douyin.com/aweme/v1/web/commit/follow/user/?{datas.params}'

r = Util.requests.post(url=api_follow_url, headers=headers, data=payload)
print(r.text)
print(r.status_code)
Johnserf-Seed commented 1 year ago

image 删掉X-Bogus就可以了,就是说 有点离谱在的

Johnserf-Seed commented 1 year ago

import Util

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
    'referer': 'https://www.douyin.com/',
    'Cookie': '#你的cookie',
    "Content-Type": "application/x-www-form-urlencoded"
}

url = "https://www.douyin.com/aweme/v1/web/commit/follow/user/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2560&screen_height=1440&browser_language=en&browser_platform=Win32&browser_name=Edge&browser_version=110.0.1587.41&browser_online=true&engine_name=Blink&engine_version=110.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7198928548617733666&msToken=ddgW0IBqBMWOoFEIz8Cp6pwd65E5NrTmnZXu95YSYY1Y6BlRSFRRqf9pcwxPhUKzvUnOnz1xqvj7FPOB00g-7wkPYIY-LA347vCNujfZSkEAb00W9M9jz-geLOcgKoXB"

payload='type=1&user_id=62706123686'

r = Util.requests.post(url=url, headers=headers, data=payload)
print(r.text)
print(r.status_code)
Johnserf-Seed commented 1 year ago

image 删掉X-Bogus就可以了,就是说 有点离谱在的

计算带上也可以,就是你的headers和payload格式不对

ShiinaRinne commented 1 year ago

删掉成了,确实太离谱了 https://baijiahao.baidu.com/s?id=1747190670465615168&wfr=spider&for=pc https://github.com/Leon406/pyutil/blob/28814589e6d484820b1b4ab1ee9606f766f3c97d/douyin/getXBoGust.js 我甚至在想怎么逆向了...

ShiinaRinne commented 1 year ago

image 删掉X-Bogus就可以了,就是说 有点离谱在的

计算带上也可以,就是你的headers和payload格式不对

之前做爬虫时候还没遇见过这种payload的格式,见到的基本点开payload页都只有一个request payload,抖音是第一次见B1GPX77J)7%JDQ5CQ`20WOP RVN9BP{MQEO})H){A}6IFAC

ShiinaRinne commented 1 year ago

今天真的麻烦大佬了,非常感谢!!!

Johnserf-Seed commented 1 year ago

image 删掉X-Bogus就可以了,就是说 有点离谱在的

计算带上也可以,就是你的headers和payload格式不对

之前做爬虫时候还没遇见过这种payload的格式,见到的基本点开payload页都只有一个request payload,抖音是第一次见B1GPX77J)7%JDQ5CQ`20WOP RVN9BP{MQEO})H){A}6IFAC

这个是因为post方法 其次是因为Content-Type=application/x-www-form-urlencoded,所以才是这样编码

Johnserf-Seed commented 1 year ago

今天真的麻烦大佬了,非常感谢!!!

共勉之

Johnserf-Seed commented 1 year ago

/x-www-form-urlencoded

https://www.cnblogs.com/wbl001/p/12050751.html

ShiinaRinne commented 1 year ago

受教了,中途我其实看到urlencoded这种形式之后需要用urllib中的parse.urlencode转一次,只是之前那个参数和headers问题,来回试过发现没变化,加上还没接触过这种请求不太确定真实性~就又删掉了~