C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ベーシック認証からブラウザ表示


(過去ログ 116 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■68290 / inTopicNo.1)  ベーシック認証からブラウザ表示
  
□投稿者/ JJJ (1回)-(2013/10/07(Mon) 18:03:31)

分類:[C#] 

Visual Studio 2008です。
C#で、ベーシック認証をプログラムで通過し、その後にブラウザを表示させる処理を作成しています。

System.Net.HttpWebRequest webreq = (System.Net.HttpWebRequest);
System.Net.WebRequest.Create("https://xxx.xxx.jp/index.html");
webreq.Credentials = new System.Net.NetworkCredential("UserID", "Password");
System.Net.HttpWebResponse webres = (System.Net.HttpWebResponse)webreq.GetResponse();

これで認証を通過出来、htmlは取得できたのですが、
ここからブラウザを立ち上げて表示させる方法がわかりません。
Process.startだとまた認証してしまいます。
コントロールWebBrowserをFormにはる方法があるようですが、
今回Formを使用しない方法を探しています。
恐れ入りますが、ご教示願えればと思います。
引用返信 編集キー/
■68291 / inTopicNo.2)  Re[1]: ベーシック認証からブラウザ表示
□投稿者/ 魔界の仮面弁士 (365回)-(2013/10/07(Mon) 18:50:03)
No68290 (JJJ さん) に返信
> 今回Formを使用しない方法を探しています。

IE 限定で良ければ、Navigate メソッド経由で。

// BASIC認証あり(IE限定)
string user = "guest";
string pass = "password";
string url = "http://htaccess.cman.jp/sample/basic/";

var token = System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(user + ":" + pass);
dynamic ie = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("0002DF01-0000-0000-C000-000000000046")));
var head = "Authorization: Basic " + Convert.ToBase64String(token) + "\r\n";
ie.Navigate(url, Type.Missing, "_blank", Type.Missing, head);
ie.Visible = true;

System.Runtime.InteropServices.Marshal.ReleaseComObject(ie);


…と思ったら、C# 2008 でしたか。
2008 だと dynamic が使えないので、"Microsoft Internet Controls" を参照設定するか、
リフレクションで Navigate メソッドを呼び出してみてください。
引用返信 編集キー/
■68590 / inTopicNo.3)  Re[2]: ベーシック認証からブラウザ表示
□投稿者/ JJJ (2回)-(2013/10/30(Wed) 17:06:46)
No68291 (魔界の仮面弁士 さん) に返信
> ■No68290 (JJJ さん) に返信
>>今回Formを使用しない方法を探しています。
> 
> IE 限定で良ければ、Navigate メソッド経由で。

魔界の仮面弁士様

大変遅くなりましたが、ありがとうございます。
以下で実装できました。
"@"での認証を使いましたので、レジストリの操作が必要になりました。

//レジストリ操作=userID+pass+"@"URLを有効にする
 RegistryKey regkey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", true);
 regkey.SetValue(@"iexplore.exe", 0);
 regkey.Close();

//IE表示(basic認証あり)
 string user = "guest";
 string pass = "password";
 string URL = "https://" + guest + ":" + pass + "@" +htaccess.cman.jp/sample/basic/";
 object m = Type.Missing;
 shdocvw.InternetExplorer ie = new shdocvw.InternetExplorer();

 ie.Navigate(URL, ref m, ref m, ref m, ref m);
 ie.Visible = true;

//レジストリ操作
 RegistryKey regkey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", true);
 regkey.SetValue(@"iexplore.exe", 1);
 regkey.Close();


ただ、既にIEが立ち上がっている場合にこの処理を実行すると
空白画面が立ち上がってしまいます。
catchするとHRESULT からの例外: 0x800C000Eとなっていまして、原因がわかりません。
この場合の対処方法を探していますが、見つからない状態です。

遅くなってしまい恐縮ですが、お知恵を拝借出来れば幸いです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -