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