質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

titanium web proxyでブラウザの通信をトレースしたい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,500

pikumin001

score 129

以下のことを試してみたのですが、titanium web proxyのレスポンス、リクエストのイベントが呼び出されていないので
何かが間違っていると思うのですが、この手のものを使うのは初めてて調べても何も出てこないので困っております。

WindowsFormでボタンを3つ配置、WebBrowserを1つ配置。
ボタン1でサーバースタート。2で終了。3でブラウザをナビゲート。
別のクラスでボタン1が押された時にtitanium web proxyのサーバーポートを127.0.0.1:8888(もしくはlocalhost:8888)
にIEのプロキシを設定。
鯖スタート後にボタン3を押すと、
プロキシ サーバーは応答していません
プロキシ設定 localhost:8888を確かめてください。
LAN を使っている場合は、[LAN の設定] をクリックしてください。
と表示され、プロキシを設定しない場合はページを閲覧することは出来すが、プロキシサーバーを通していないため、
レスポンス、リクエストのイベントは呼び出されないといった状況です。
また、サーバーのポート設定しないでデフォルトのポートとアドレスをIEに設定してもだめでした。
(調べてみるとデフォルトは127.0.0.1:8080のようです)

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;
using Titanium.Web.Proxy;


 public partial class test : Form
    {
        public test()
        {
            InitializeComponent();
        }


        ProxyServer proxyServer;

        private void button1_Click(object sender, EventArgs e)
        {
            proxyServer = new ProxyServer();

            proxyServer.BeforeRequest += OnRequest;
            proxyServer.BeforeResponse += OnResponse;
            proxyServer.UpStreamHttpProxy = new ExternalProxy() { HostName = "localhost", Port = 8888 };
            proxyServer.UpStreamHttpsProxy = new ExternalProxy() { HostName = "localhost", Port = 8888 };
            proxyServer.Start();

            //IEのLAN設定のプロキシを以下に設定//
            SetProxy.SetConnectionProxy("localhost:8888");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //サーバーをストップし、プロキシをデフォルトに戻す//
            proxyServer.Stop();
            SetProxy.RestoreSystemProxy();

        }

        private void button3_Click(object sender, EventArgs e)
        {
            webBrowser1.Navigate("https://www.google.co.jp/");
        }


        private async Task OnResponse(object arg1, Titanium.Web.Proxy.EventArguments.SessionEventArgs e)
        {

            var responseHeaders = e.WebSession.Response.ResponseHeaders;

            //if (!e.ProxySession.Request.Host.Equals("medeczane.sgk.gov.tr")) return;
            if (e.WebSession.Request.Method == "GET" || e.WebSession.Request.Method == "POST")
            {
                if (e.WebSession.Response.ResponseStatusCode == "200")
                {
                    if (e.WebSession.Response.ContentType != null && e.WebSession.Response.ContentType.Trim().ToLower().Contains("text/html"))
                    {
                        byte[] bodyBytes = await e.GetResponseBody();
                        await e.SetResponseBody(bodyBytes);

                        string body = await e.GetResponseBodyAsString();
                        await e.SetResponseBodyString(body);
                    }
                }
            }
        }

        private IDictionary<Guid, string> requestBodyHistory;
        public async Task OnRequest(object sender, Titanium.Web.Proxy.EventArguments.SessionEventArgs e)
        {
            Console.WriteLine(e.WebSession.Request.Url);

            var requestHeaders = e.WebSession.Request.RequestHeaders;

            var method = e.WebSession.Request.Method.ToUpper();
            if ((method == "POST" || method == "PUT" || method == "PATCH"))
            {
                //Get/Set request body bytes
                byte[] bodyBytes = await e.GetRequestBody();
                await e.SetRequestBody(bodyBytes);

                //Get/Set request body as string
                string bodyString = await e.GetRequestBodyAsString();
                await e.SetRequestBodyString(bodyString);

                //store request Body/request headers etc with request Id as key
                //so that you can find it from response handler using request Id
                requestBodyHistory[e.Id] = bodyString;
            }
        }
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

以下の2行を削除してみてください。

            proxyServer.UpStreamHttpProxy = new ExternalProxy() { HostName = "localhost", Port = 8888 };
            proxyServer.UpStreamHttpsProxy = new ExternalProxy() { HostName = "localhost", Port = 8888 };

UpStreamProxyはTitaniumがさらにプロキシを使う場合に使用します。
WebBrowser > Titanium > Web Server
WebBrowser > Titanium > UpStream Proxy > Web Server

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/07 21:15

    度々すみません。
    教えていただいたページでアドレスとポートを設定する方法はわかったのですが、
    肝心のtitanium web proxyのアドレスとポートがわかりませんでした。
    どこかで設定と取得ができるとはおもうのですが、ご存じないでしょうか?

    キャンセル

  • 2017/07/10 10:57 編集

    redeme.mdのusageを見てください。proxyServer.AddEndPoint(explicitEndPoint);とありますよ。

    キャンセル

  • 2017/07/11 03:29

    ありがとうございました、無事に設定することができました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる