0

このリバース プロキシ スクリプトを動作させることができない理由について、いくつかのガイダンスをいただければ幸いです。

環境

  • https://motherpipe.co.ukでプライバシー検索エンジンを構築しています。
  • サイトは https にあり、ユーザーが何を検索しているか、誰であるかなどを知っている他のサイトからユーザーを保護したいと考えています。
  • Twitter 検索 API の結果を検索結果ページに統合しています。Twitter のプロフィールのサムネイル画像を検索結果ページに含めたいと考えています。
  • ユーザーを保護しているため、結果ページから twitter サーバー上の画像に直接リンクすることはできません。
  • したがって、クライアント IP を Twitter サーバーに公開しないように、PHP スクリプトを使用してファイルをフェッチしてページに返します。
  • ここで見つけた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