今、仕事のプログラム書いてます。

3連休もあったのに、すっかり遊び呆けてしまい、追い詰められています。

でも、現実逃避のために、みなさんのブログを見に行っているので、一向に進みません。

というより、現実逃避している時間の方がはるかに長いんですが…



さて。

ブラウザをプログラム中に埋め込みたいんだけど、User-Agentだけは変更しなければならない、という要求があったとしましょう。

以前の記事 のようにHTTP Clientを自製すれば変更可能ですが、HTMLブラウザまではさすがに自作できません。よって、クラスライブラリで用意されているIEのコンポーネントを使うことになります。


WPFを使わないC#だと、System.Windows.Forms.WebBrowser コンポーネントを使ってWebブラウザ部分を作るのが一般的と思われますが、残念ながらプロパティにはUser-Agentが変更できる項目が見当たらないので、簡単には変更できそうもありません。


と、困ったら、ぐーぐる先生! というわけで。


ありました。

へっぽこSE奮闘記 さんのページで発見。


無事に目的が果たせました。ありがとうございます _O_


まず、DLLの宣言。

    [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
    private static extern int UrlMkSetSessionOption(int dwOption, string str, int nLength, int dwReserved);
そして初期化メソッドの中で

    const int URLMON_OPTION_USERAGENT = 0x10000001;
    string ua = "Strings you'd like to set to the User-Agent";
    UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);

これでOK。

元のページには、書き換えだけじゃなくて、User-Agentに任意の文字列を追加する方法も載ってます。


この方法を使ってブラウザを作れば、普段見れない場所も見れるようになるはず。例えば、携帯専用サイトはUser-Agentで見分けていることが多いらしいので、この方法を使ってブラウザを作ればPCからも見ることができるようになると思います。

問題は、携帯電話のUser-Agentが何か、、、ですね。



こんな記事書いてる場合じゃねぇーー。