「Titanium-Web-Proxy 3 (2023/12/06)」



さて、プロキシーソフト。
Titanium.Web.Proxy (以下 TWP)の
の具体的なコードを解説します。





TWPの具体的な「Web改変」は
この二行です。


ここで 「プロキシーサーバーは、レスポンスの前にフックを入れる」 と宣言している。


B.

そしてこっちがフックの関数。

このSessionEventArgs eが、
Httpのヘッダー&ボディーを持っているので。
eのボディーを取得して、改変して、入れ替える。




以下、フィルター記述の一例:

まずはテキスト/バイナリの判定関数から。

/*
  TWPは汎用プロキシーなので。
  ブラウザに届けられるあらゆるデータ、
  画像/音楽/ムービーなどのバイナリデータも入ってくる。
  バイナリはスルーする為、まずはテキスト系かどうかを判定する。
*/
bool isText(string content_type)
{
  if (content_type.Contains("javascript")) return true;
  if (content_type.Contains("text")) return true;
  if (content_type.Contains("/json")) return true;
  return false;
}




次に、特定のリンクを消す関数




※あくまで、デモンストレーション用の一例。
実際にこれで運用したら結構
問題も出るので、各自で工夫してください。




それらを組み合わせて、具体的な
onResponseを記述する。

private async Task onResponse(SessionListItem item, SessionEventArgs e)
{
  var r = e.HttpClient.Response;

  //ステータスコード。200(成功)以外だったらそのまま
  {
    int success = 200;
    if (r.StatusCode != success) return false;
  }

  //テキスト以外は弾く。そしてbodyの取得
  string body;
  var content_type = r.ContentType;
  {
    if (content_type == null) return false;
    content_type = content_type.Trim().ToLower();
    
    if (!isText(content_type)) return false;
    if (!r.HasBody) return false;

    body = await e.GetResponseBodyAsString();
    if (body == null) return false;
  }
  
  //リンクキラー
  body = A_killer(body);
  e.SetResponseBodyString(body);
}
  


なんだかんだ言って、やってる事自体は
  string body;
  body = 改変(body)
ただテキストを書き換えてるだけなので、
そこまで難しい内容ではありません。




・この内容でTWPをビルド。

・TWP.exeを立ち上げる。

・インターネット設定で 「localhost:TWPのポート」に接続すると、


データがTWP経由でブラウザに届けられるようになり

NGワードを含む<a>リンクが除去されるようになります。




TWPは全てのデータを経由するので、
記述さえすれば
「ありとあらゆるWeb改変フィルター」を実装する事ができます。

次回、より高度なフィルター。
特定のサイト向けの Javascript / Jsonを使った
NGフィルターを紹介。