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

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

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

Re[5]: ベーシック認証とファイルダウンロードの方法


(過去ログ 118 を表示中)

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

■69566 / inTopicNo.1)  ベーシック認証とファイルダウンロードの方法
  
□投稿者/ つばみ (1回)-(2014/01/09(Thu) 14:14:22)

分類:[C#] 

初投稿させていただきます。

環境:VS2013 C# Windows8.1Pro

ベーシック認証が必要なURLサイトからリンク先のファイルを
ダウンロードするという処理で、2点わからないことがあります。

1)ベーシック認証はどう実装するのか?
WebClientとHttpWebRequestとの違い等どう処理していいのか
分かりません。
HttpWebRequest.Credentialを使ってID,Passwordを設定して、
やるべきなのか、他の方法がありそちらの方が分かりやすくて便利なのか?

2)ダウンロードの実装
ダウンロードするファイルはGetElementsByTagName("A")から
InnerTextの文字列によって、取得するのですが、そこから
ダウンロードさせる方法が、分からない状態です。

2点、ヒントでもよろしいのですので、ご教授いただければ幸いです。
よろしくお願いします。

引用返信 編集キー/
■69567 / inTopicNo.2)  Re[1]: ベーシック認証とファイルダウンロードの方法
□投稿者/ Hongliang (153回)-(2014/01/09(Thu) 14:26:35)
> 1)ベーシック認証はどう実装するのか?
> WebClientとHttpWebRequestとの違い等どう処理していいのか
> 分かりません。
WebClientはHttpWebRequest(/HttpWebResponse、の他にFTPとかもまとめて)を簡単に扱えるようにしたものです。
WebClientにせよHttpWebRequestにせよ、認証にはCredentialsプロパティを使ってやるのが多分一番分かりやすいでしょう。BASIC認証にはNetworkCredentialクラスを使用できます。
// urlに混ぜる方法でも多分いけると思いますが。

> 2)ダウンロードの実装
> ダウンロードするファイルはGetElementsByTagName("A")から
> InnerTextの文字列によって、取得するのですが、そこから
> ダウンロードさせる方法が、分からない状態です。

よく分からないといわれてもちょっと漠然としていてなんとも言い難いですが…。
とりあえずWebClientなりのMSDNのページを開いてみて、サンプルコードを見てみたらいかがでしょうか。
引用返信 編集キー/
■69569 / inTopicNo.3)  Re[1]: ベーシック認証とファイルダウンロードの方法
□投稿者/ 魔界の仮面弁士 (494回)-(2014/01/09(Thu) 14:37:19)
No69566 (つばみ さん) に返信
> WebClientとHttpWebRequestとの違い
前者はベースクラス、後者は派生クラスです。
System.Net.HttpWebRequest は、System.Net.WebRequest を継承したクラスです。
System.Net.FtpWebRequest も、System.Net.WebRequest を継承したクラスです。


HttpWebRequest による BASIC 認証については、下記が参考になるかと。
http://dobon.net/vb/dotnet/internet/usecredentials.html

Cookie が併用されている場合は、下記もご利用ください。
http://dobon.net/vb/dotnet/internet/usecookie.html


> ダウンロードするファイルはGetElementsByTagName("A")から
> InnerTextの文字列によって、取得するのですが、そこから
> ダウンロードさせる方法が、分からない状態です。
WebBrowser を使っているのであれば、ActiveXInstance プロパティで
元となる ActiveX コントロールを受け取り、それの Navigate2 メソッドの第5引数に、
ヘッダ文字列として
 "Authorization: Basic " + account + "\r\n"
を渡すという手法が使えるかもしれません。

account の部分は、userid + ":" + password を
Convert.ToBase64String した文字列です。
引用返信 編集キー/
■69571 / inTopicNo.4)  Re[1]: ベーシック認証とファイルダウンロードの方法
□投稿者/ WebSurfer (157回)-(2014/01/09(Thu) 16:05:06)
No69566 (つばみ さん) に返信
> 初投稿させていただきます。

1) は回答済みのようですので 2) のみ回答します。

> 2)ダウンロードの実装
> ダウンロードするファイルはGetElementsByTagName("A")から
> InnerTextの文字列によって、取得するのですが、そこから
> ダウンロードさせる方法が、分からない状態です。

IE を使って普通にそのページを表示させた場合、画面上のその a 要素(ハイパーリンク)をクリ
ックすればダウンロードできるのであれば・・・

例えば、WebBrowser を使って、そのページに Navigate ⇒ WebBrowser.DocumentCompleted イベン
トで当該 a 要素の HtmlElement オブジェクトを取得 ⇒ HtmlElement.InvokeMember("click") で
クリックする・・・という手順で出来そうな気がします。

未検証ですのでハズレでしたらすみません。
引用返信 編集キー/
■69578 / inTopicNo.5)  Re[1]: ベーシック認証とファイルダウンロードの方法
□投稿者/ つばみ (2回)-(2014/01/09(Thu) 18:17:15)
2014/01/09(Thu) 18:22:32 編集(投稿者)

Hongliangさん、魔界の仮面弁士さん、WebSurferさん
返信ありがとうございます。

1)の認証については魔界の仮面弁士さんの参照リンクから
何とか解決するに至りました。
(GetResponse時にID,Passwordが認証を通らなければここでエラーが発生?)

2)については説明不足だったかもしれません。
例えばhttp://www.hoge.jp/xxx/index.html(認証必要)ページにおいて
ページソースの
タグ(A href="yyy0001.lzh")yyy0001.lzh(/a)
タグ(A href="yyy0002.lzh")yyy0002.lzh(/a)
(続く)
タグ(A href="yyy0999.lzh")yyy0999.lzh(/a)
というリストのリンクが貼られたファイル(この例ですとyyy0001.lzh〜yyy9999.lzh
。数は一定期間ごとに増えていくので、その都度変わっていきます。)
を一覧表示し(コンボボックスで表示予定)、ユーザーが0001〜0009をダウンロードするとしたときに
対応するファイルhttp://www.hoge.jp/xxx/yyyy0001.lzhhttp://www.hoge.jp/xxx/0009.lzh
をダウンロードする処理です。(ブラウザ表示させずにダウンロードのみを実行します)
ファイル名は規則性があるので、リンク先のInnerTextにて判断する方法でいいと考えております。

2)の処理で参考にしているサイト
http://www.atmarkit.co.jp/fdotnet/dotnettips/687nondispbrowser/nondispbrowser.html

http://www.atmarkit.co.jp/fdotnet/dotnettips/908classname/classname.html

引用返信 編集キー/
■69581 / inTopicNo.6)  Re[2]: ベーシック認証とファイルダウンロードの方法
□投稿者/ WebSurfer (160回)-(2014/01/09(Thu) 20:40:14)
No69578 (つばみ さん) に返信
> 対応するファイルhttp://www.hoge.jp/xxx/yyyy0001.lzhhttp://www.hoge.jp/xxx/0009.lzh
> をダウンロードする処理です。(ブラウザ表示させずにダウンロードのみを実行します)
> ファイル名は規則性があるので、リンク先のInnerTextにて判断する方法でいいと考えております。

相手は Web サーバーであれば、要求を出して帰ってくるのは HTTP 応答です
が、そのあたりは理解されているでしょうか?
引用返信 編集キー/
■69586 / inTopicNo.7)  Re[3]: ベーシック認証とファイルダウンロードの方法
□投稿者/ つばみ (3回)-(2014/01/10(Fri) 05:24:43)
No69581 (WebSurfer さん) に返信
> 相手は Web サーバーであれば、要求を出して帰ってくるのは HTTP 応答です
> が、そのあたりは理解されているでしょうか?

正直、いちから勉強している状態ですので、少しだけ理解している感じです。
全くのど素人と思ってもらってもいいです。申し訳ありません。
引用返信 編集キー/
■69591 / inTopicNo.8)  Re[4]: ベーシック認証とファイルダウンロードの方法
□投稿者/ PANG2 (21回)-(2014/01/10(Fri) 12:46:43)
案1)
WebClient.DownloadStringでindex.htmlを文字列で取得
正規表現で解析
WebClient.DownloadFileでlzhファイルをダウンロード

http://www.atmarkit.co.jp/fdotnet/dotnettips/579regexmatch/regexmatch.html

案2)
WebClient.DownloadFileでindex.htmlをテンポラリーファイルに保存
WebBrowserにテンポラリーファイルを読み込ませる
GetElementsByTagNameで抽出
WebClient.DownloadFileでlzhファイルをダウンロード

HTML解析を自力でやるかWebBrowserに任せるかの違い
引用返信 編集キー/
■69598 / inTopicNo.9)  Re[5]: ベーシック認証とファイルダウンロードの方法
□投稿者/ つばみ (4回)-(2014/01/10(Fri) 17:54:56)
2014/01/10(Fri) 17:55:24 編集(投稿者)

No69591 (PANG2 さん) に返信
> 案1)
> WebClient.DownloadStringでindex.htmlを文字列で取得
> 正規表現で解析
> WebClient.DownloadFileでlzhファイルをダウンロード
>
> http://www.atmarkit.co.jp/fdotnet/dotnettips/579regexmatch/regexmatch.html
>
> 案2)
> WebClient.DownloadFileでindex.htmlをテンポラリーファイルに保存
> WebBrowserにテンポラリーファイルを読み込ませる
> GetElementsByTagNameで抽出
> WebClient.DownloadFileでlzhファイルをダウンロード
>
> HTML解析を自力でやるかWebBrowserに任せるかの違い

PANG2さん、案1で解決するに至りました。
参照ページ(@IT)URLも助かりました。
ありがとうございました。

その他、拙い私にご教授下さった
Hongliangさん、魔界の仮面弁士さん、WebSurferさん、ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -