非常感谢一些指导,说明为什么我不能让这个反向代理脚本工作。
语境
- 我正在https://motherpipe.co.uk建立一个隐私搜索引擎
- 该站点位于 https 上,我想保护用户免受其他站点的影响,知道他们搜索的内容、他们是谁等等。
- 我正在将 twitter 搜索 api 结果集成到我们的搜索结果页面中。我们希望在我们的搜索结果页面上包含 twitter 个人资料缩略图。
- 因为我们在保护我们的用户,所以我们不能直接从结果页面链接到 twitter 服务器上的图像。
- 因此,我使用 PHP 脚本来获取文件并将其返回到页面,因此不会将客户端 IP 暴露给 Twitter 服务器。
- 我正在使用我在这里找到的alireza-balouch编写的脚本。
问题
- 我似乎无法从我的结果页面正确链接到此脚本。当我运行它时,结果页面正在调用脚本(我认为),但结果是 HTML 仍然包含到 Twitter 服务器的直接链接。我希望所有这些链接都指向我在服务器上的脚本。
- 另外 - 如果我直接在浏览器中尝试脚本,我只会从例如“reverseproxy.php?url=aHR0cDovL3d3dy5wYWdpbmFzcHJvZGlneS5jb20ubXgvcGVtcG8yL0RWRF9kaXNjby5qcGc=”的输入中得到什么
问题:
我如何调整它以显示图像,但 HTML 页面中的图像链接都指向我自己的服务器而不是 Twitter 的?
任何反馈或想法将不胜感激。
结果页面上的代码:
$url = 'https://api.twitter.com/1.1/search/tweets.json';
$requestMethod = 'GET';
$getfield = '?q=sweden&result_type=recent';
$twitter = new TwitterAPIExchange($settings);
$response = $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
$obj = json_decode($response, true);
$reverseproxy = "https://mysercureserver/reverseproxy.php?url=";
echo "<div><ul>";
foreach ($obj["statuses"] as $index => $result) {
$tweet = $result['text'];
$tweet = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $tweet);
$user = $result['user']['screen_name'];
$profile_image = $result['user']['profile_image_url'];
$profile_image = base64_encode($profile_image);
$image = file_get_contents("https://mysecureserver/reverseproxy.php?url=".$profile_image);
echo "<li>";
echo "<img src=\"".$image."\" width=\"25px\" height=\"25px\" />";
echo "<a href=\"http://twitter.com/$user\">@$user</a>";
echo " $tweet";
echo "</li>";
}
echo "</ul></div>";
和脚本:
$file = base64_decode(@$_GET['url']);
$aFile = end(explode('.' , $file));
if($aFile == 'jpg' or $aFile == 'jpeg'){
header('Content-Type: image/jpeg');
}elseif($aFile == 'png'){
header('Content-Type: image/png');
}elseif($aFile == 'gif'){
header('Content-Type: image/gif');
}else{
die('not supported');
}
if($file != ''){
$cache_expire = 60*60*24*365;
header("Pragma: public");
header("Cache-Control: maxage=". $cache_expire);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache_expire).' GMT');
echo $file;
}
exit;