在为 PHP 抓取器添加更多重写之前,先确定下一个资源该去哪里。从 https://destination.example/catalog/ 抓取、并在 https://viewer.example/browse?url=... 返回的文档可能包含:

<img src="photo.jpg">
<a href="details/42">Details</a>

浏览器会用它在查看器中收到的文档来解析这些引用。PHP 抓到了原始字节,并不等于确立了远端基准。

base 元素可以把相对 URL 指向目标站点,但那些请求随后可能直接从浏览器发往目标。若要让每个请求都经过 PHP,则需要代理 URL 和更完整的路由模型:

资源或操作所需处理
链接与图片相对远端文档解析,并生成预期路由
CSS 导入与资源使用样式表的远端基准
表单保留方法与提交的数据
重定向让导航留在允许的模型内
脚本创建的请求处理原始 HTML 中不存在的 URL

几处正则替换无法保证对脚本密集的网站普遍兼容。对于已知的公开文档,也许关闭导航、允许直接链接,或把受支持的子集经由查看器转发就够了。要保留真实媒体类型,而不是把每个响应都当作 HTML。

从你的域名返回不受信任的标记,也会让它获得查看器的浏览器源,而不是被抓站点的身份。把这些文档与账户、管理页面隔离。为每位访客定义远端 Cookie、允许转发的请求头和重定向目标;共用的 Cookie 罐会混淆远端登录。

在提供浏览会话之前,先确认这条支持边界。若只是经另一个出口普通浏览,浏览器自带的代理界面,例如 Firefox 的 HTTP/SOCKS 设置,会保留浏览器的目标 URL 与源模型,无需这一抓取再发布层。若要做单独的公开站点测试,免费代理列表 提供候选端点;在浏览器设置里匹配协议。

相关文章