红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 随笔
  3. 正文

与某网站的一次斗智斗勇

2025年5月27日 14点热度 0人点赞 0条评论

今天查东西的时候以外发现一个不错的资源(dao ban)站:

  • 影视仓-院线热映·经典重制·独播剧集一仓尽享

页面简洁,没有乱七八糟的小广告,资源也丰富,而且连接速度也快。所以就打算顺手把这网站加到我的油猴脚本Douban Download Helper里。

网站的搜索结果页面的 url 如下:

https://www.yingshicang.com/vodsearch/-------------/?wd=%E8%97%8F%E6%B5%B7%E4%BC%A0

所以一开始就简单将其作为跳转外链加到脚本里,但实际发现并不能正常跳转,打开的新页面不能正常显示内容。

查看了一下调试信息,发现很可能是网站监测了referer头信息,第三方网站跳转不会正常加载页面。

查了一下,Referer头信息无法正常修改,但是可以用油猴脚本的 API 修改并完成 HTTP 请求:

// ==UserScript==
// @name         Bypass Referer Demo
// @namespace    your-namespace
// @version      1.0
// @match        https://third-party-site.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==
​
(function() {
    'use strict';
    // 修改所有指向目标网站的链接行为
    document.querySelectorAll('a[href*="yingshicang.com"]').forEach(link => {
        link.addEventListener('click', function(e) {
            e.preventDefault();
            const targetUrl = this.href;
​
            // 发送自定义请求
            GM_xmlhttpRequest({
                method: "GET",
                url: targetUrl,
                headers: {
                    "Referer": "https://www.yingshicang.com" // 伪装合法来源
                },
                onload: function(response) {
                    // 将响应内容注入新窗口或当前页面
                    const newWindow = window.open();
                    newWindow.document.write(response.responseText);
                }
            });
        });
    });
})();

但试了一下,并不能正常工作。所以决定换一个思路,第三方链接只跳转到主页,然后用另一个油猴脚本模拟用户在搜索框填写关键字并进行搜索。

搜索关键字通过 URL 的查询参数传递,通过以下 API 获取:

const urlParams = new URLSearchParams(window.location.search);
const keyword = urlParams.get('auto_search_key');

实际测试了一下,发现该网站的开发者禁用了URLSearchParams这个 API,甚至在控制台输出信息中写了你懂的太多了之类的alert信息。

不过这很容易绕过去,让 AI 写一个手撕参数的替代版本:

const url = 'https://www.yingshicang.com/vodsearch/-------------/?wd=123';
​
// 提取 wd 的值
function getWdParam(url) {
  try {
    // 如果传入的是完整 URL,可以用 URL 对象解析
    const urlObj = new URL(url);
    return urlObj.searchParams.get('wd');
  } catch (e) {
    // 如果 URL 格式不完整,直接解析参数部分
    const params = new URLSearchParams(url.split('?')[1] || '');
    return params.get('wd');
  }
}
​
console.log(getWdParam(url)); // 输出 "123"

再调试了几轮,就能正常使用了。觉得这个过程有点意思,感觉目标网站的开发者主要还是防止被爬流,顺带防范了一下我们这种第三方跳转...但也就是拉高了一点点难度罢了。

有兴趣的可以试试我的油猴脚本Douban Download Helper:

image-20250527145546039

The End.

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: GreasyFork
最后更新:2025年5月27日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇

文章评论

取消回复

*

code

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号