0

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

语境

  • 我正在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;
4

1 回答 1

0

所以我自己调整了脚本并使用 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;
于 2013-11-08T17:34:38.097 回答