![代理+PHP:使用 PHP 脚本过滤和处理特定的代理请求和响应](https://linux22.com/image/536481/%E4%BB%A3%E7%90%86%2BPHP%EF%BC%9A%E4%BD%BF%E7%94%A8%20PHP%20%E8%84%9A%E6%9C%AC%E8%BF%87%E6%BB%A4%E5%92%8C%E5%A4%84%E7%90%86%E7%89%B9%E5%AE%9A%E7%9A%84%E4%BB%A3%E7%90%86%E8%AF%B7%E6%B1%82%E5%92%8C%E5%93%8D%E5%BA%94.png)
我需要在网络 X 中的机器 A 上配置代理。然后我需要连接同一网络 X 上的客户端(智能手机),但代理配置与机器 A 上准备的代理配置相同。因此,基本上,智能手机将通过机器 A 才能连接到互联网并接收远程响应。
我尝试使用 Apache 及其 mod_proxy.so 模块。
我真正需要做的是,当客户端(智能手机)请求特定 URL(例如 Google)时,代理服务器必须过滤该请求并将其发送到一个 PHP 脚本,该脚本被编程来处理该请求并向客户端发送特定答案(而不是远程服务器响应的原始答案)。对于所有其他请求(网站和站点),一切都将正常(不会被代理服务器过滤)。
我尝试在 Apache 上使用正向代理,但我只能跟踪日志访问文件。仅此而已。我无法为特定请求创建“重定向”。
然后我想到了一个反向代理,尝试通过 ProxyPass 和 ProxyPassReverse 将特定请求重定向到本地位置。没有用。似乎反向代理仅适用于在外部或内部解决本地请求。但不能用于将外部请求解析为本地请求。
然后我尝试使用 mod_ext_filter.so,并使用“SetOutputFilter”,创建对 php.exe(Windows 实现)的调用以及一个特定的 test.php 脚本来打印 $_SERVER 数组,并且我设法从我的智能手机(客户端)查看正确的 REQUEST_URI,将文件打印到“C:\”。
但是,当脚本执行完毕后,客户端却收不到任何回复。所以这似乎也不是一个好方法。
我该怎么办?有人跟我讨论过 SQUID 和内容适配,但我不太清楚。
答案1
鱿鱼外部重定向器会完全按照您的要求执行。您可以让它重写某些请求,使其指向本地服务器上的 PHP 脚本,同时允许其他请求传递到 Internet。
外部重定向器只是一个小程序,它接收来自 上的 squid 的请求stdin
,根据需要重写它们,然后将它们返回给 上的 squid stdout
。