如何使用反向代理脚本从 SSL 链接到外部度量


How to link from SSL to external imgages with reverse proxy script

非常感谢一些指导,为什么我无法让这个反向代理脚本工作。

上下文

  • 我正在 https://motherpipe.co.uk 建立一个隐私搜索引擎
  • 该网站在https上,我想保护用户免受其他网站的侵害,知道他们搜索的内容,他们是谁等等。
  • 我正在将推特搜索 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;

所以我自己调整了脚本,并使用 curl 让它工作。工作脚本:

$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');

//The cURL stuff...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$file");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$picture = curl_exec($ch);
curl_close($ch);
//Display the image in the browser
header('Content-type: image/jpeg');
echo $picture;
    }
    exit;