如何使用Jsoup获取MusicalDown页面结果以提取TikTok视频URL
解决MusicalDown提取TikTok视频URL的问题
你的代码直接提交POST请求但未处理会话Cookie,这是导致无有效返回的核心问题。MusicalDown需要先通过GET请求主页获取会话标识,再携带该Cookie提交POST请求,同时要补充必要的请求头模拟真实浏览器行为。
修正后的代码如下:
Thread { val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" val targetUrl = "https://www.tiktok.com/@islam_mch573/video/7221917367616490757" // 第一步:GET主页获取会话Cookie val getResponse = Jsoup.connect("https://musicaldown.com/en") .userAgent(USER_AGENT) .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .header("Accept-Language", "en-US,en;q=0.5") .method(Connection.Method.GET) .execute() val sessionCookies = getResponse.cookies() // 第二步:携带Cookie提交POST请求 val postResponse = Jsoup.connect("https://musicaldown.com/en/download") // 注意提交路径是/download,不是主页 .userAgent(USER_AGENT) .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .header("Accept-Language", "en-US,en;q=0.5") .header("Referer", "https://musicaldown.com/en") .cookies(sessionCookies) .data("link_url", targetUrl) .ignoreContentType(true) .method(Connection.Method.POST) .execute() // 解析响应提取视频URL val doc = postResponse.parse() // MusicalDown的下载链接通常在class为"download-links"的容器下的a标签里 val videoUrlElement = doc.selectFirst("div.download-links a") val videoUrl = videoUrlElement?.attr("href") ?: "未找到视频URL" runOnUiThread { data.text = videoUrl } }.start()
关键修正点说明:
- 先发起GET请求获取会话Cookie,服务器需要这个标识验证请求合法性
- POST请求的目标路径是
/en/download,不是主页路径 - 补充
Referer、Accept等请求头,避免被服务器判定为爬虫 - 解析时直接定位到下载链接的元素,而非输出整个页面文本
如果仍无法获取结果,可能是网站更新了表单参数或反爬机制,此时需要抓包浏览器的真实请求,对比参数和请求头是否完全一致。
内容的提问来源于stack exchange,提问作者وائل خالد
相关产品推荐
相关产品推荐

