概要: ヘッダーに "Authorization: Basic 変換したコード" と基本認証のコードを埋め込み、Basic認証のページをIEで開いてみました。 'テスト用の認証ページに飛ぶ Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objIE.navigate2 strURL, , , , strHEAD たんに埋め込んだコードをヘッダーで送っているだけです。 ※メルマガ記事ではオブジェクトの参照設定をしていませんができれば、下記を参考に参照設定してください。 [Microsoft Internet Controls,Microsoft HTML Object Library を参照設定する](このほうが開発時、操作時に楽) また、VistaとIE7の場合は、 [IE7 操作 Vistaで失敗]も参考にしてください。 |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
<IE 認証ページへのアクセス、basci認証ページって?>
どうも、三流プログラマーのKen3です。 今回は、 IEでbasci認証ページへアクセスしてみたいと思います。 http://www.ken3.org/vba/lzh/vba159.lzh にサンプルweb159.xlsを圧縮しておきます、 Excel2000版ですが使ってみてください。 関連項目、 三流君VBAでInternetExplorer.Applicationを操作する(IE操作) http://www.ken3.org/cgi-bin/group/vba_ie.asp もヨロシクね。/* * 1.今回のキッカケ */
昔、掲示板に下記の質問をもらいました。 ---------- 投稿時間:2004/03/28(Sun) 20:59 投稿者名:kuma san タイトル:Basic認証のページ はじめまして 今Vbsにてプログラムを作っているのですが ここのページはよく参考にしています。 1つどうしてもできないことがあって質問致します。 Basic認証のページのHTMLを保存するプログラムを書こうと思っているのですが、 id,passをきかれて、そこでsendkeysで{enter}をおくりたいのですが、どうも送る ことができず困っています。 何かこういった場合特別な方法があるのでしょうか?? ---------- 投稿時間:2004/03/31(Wed) 13:49 投稿者名:Ken3 タイトル:Re: Basic認証のページ Basic認証のページ user名とパスワードを入力する、ダイアログのことですよね。 たしか、sendkeysを使わなくてもよい方法がどこかに載っていたと思うので、少し 見てみますね。 ですが、期待しないでね。 マシーン壊れて、今、復旧中なので少々お待ちを。 ---------- マシーンは復旧しただろ?って自己突込みは置いといて、 今回は基本認証のページについて少し探りながら遊んでみます。/* * 2.認証ページって何? */
会員の限定ページや、パスワードで管理したい秘密のページ、 そんなページがあります。 ありますじゃなくって、パスワードで管理されたページを作ることができます。 私の借りているNTTのホスティングサービスでは、 ユーザ認証(アクセス制限)の設定について http://www.ocn.ne.jp/myhosting/howto/6-3e-1.html みたいな感じで、簡単に設定可能でした。 試しに、zzzとディレクトリを作成して、 ユーザー名 mailmaga パスワード guest と設定してみました。 ↑簡単な設定方法(用意されたコントロールパネルを使用してみた) テストの前にいつもの宣伝。(オイオイ、やりすぎるとクレーム来るぞ?) 通常、下記のようなページを表示できます。 http://www.kurokiya.sake-ten.jp/GAME/index.html ← ゲームの通販 http://www.kurokiya.sake-ten.jp/idol/index.html ← アイドル関係 http://www.kurokiya.sake-ten.jp/DVD/index.html ← DVDの販売 新たな通販ページを作成中・・・みんなが見なくてもロボットが 読んでくれる事を期待して、リンクを載せるセコい技(笑) なんて、いつもの宣伝はほとほどにスルーして(スルーしなくて見てもいいけど) 基本認証を設定したzzz下記にアクセスすると http://www.kurokiya.sake-ten.jp/zzz/ useridとpasswordの確認画面が表示されます。 ユーザー名 mailmaga パスワード guest と入力して、ログインすることができます。 ↑basic認証の画面 少し駆け足でしたが、認証ページの設定と動作でした。 ※会員制のページも簡単に作れそうですね。 --- 補足 ---- 通常は、下記のようなファイルを作るらしいけど、知識が無くて、 NTTが用意したホスティングのコントロールパネルから設定しました。 .htaccess AuthUserFile /u/zzz/.htpasswd AuthGroupFile /dev/null AuthName Protected Area AuthType Basic <Limit GET POST> require user mailmaga </Limit> と .htpasswd mailmaga:J***********E ←*は私がつぶしてます、通常はパスワードが設定されてます って感じのファイルを自分で作るには、私は正直まだ勉強不足です。 そんなんじゃ・・・と思いつつ、日々の在宅業務や派遣先でイジメラレテタリ。 その他日記 http://blog.melma.com/00034126/?word=%5betc%5d/* * 3.自動巡回の壁 IDとパスワードを聞いて来る */
話を戻して、 自動巡回だとパスワードを求められるページで処理が止まってしまいます。 fromに入れるタイプなら、submitなんてできるけど、 今回みたいな基本認証のダイアログが表示されると、それをかわしたいですよね。 '下記、パスワード入力で止まっている問題のプログラム 'ID:mailmaga password:guestを入力すると、動き出しますが、、、
Sub aaaa() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'テスト用の認証ページに飛ぶ objIE.navigate "http://www.kurokiya.sake-ten.jp/zzz/" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop 'テストでHTMLソースを取出す Dim strhtml As String strhtml = objIE.Document.all(0).innerHTML '変数に代入 MsgBox "ソースは" & strhtml & "です" End Sub |
Sub bbbb() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'テスト用の認証ページに飛ぶ Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objIE.navigate2 strURL, , , , strHEAD '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop 'テストでHTMLソースを取出す Dim strhtml As String strhtml = objIE.Document.all(0).innerHTML '変数に代入 MsgBox "ソースは" & strhtml & "です" End Sub |
投稿時間:2006/05/01(Mon) 23:11 投稿者名:み Eメール: URL : タイトル:基本認証とcsvファイル はじめまして。“み”と申します。 |
投稿時間:2006/05/02(Tue) 09:26 投稿者名:Ken3(管理者) Eメール: URL : タイトル:Re: 基本認証とcsvファイル 基本認証が不要の場所、通常の場所にcsvファイルを置いた時はどうなりますか?(条件を基本認証とcsvファイルの2つから1つに切り分けてみる) |
投稿時間:2006/05/02(Tue) 10:52 投稿者名:み Eメール: URL : タイトル:Re^2: 基本認証とcsvファイル ぶしつけで下手な質問に対し丁寧な回答ありがとうございます |
投稿時間:2006/05/02(Tue) 16:35 投稿者名:Ken3(管理者) Eメール: URL : タイトル:基本認証 csvファイル XMLHTTPでダウンロードしてみては? ごめんなさい、真逆だったのですね。 ※私の回答はIEで開けない時?で、質問はIEで開かせたくない、Excel内で開きたいでしたか・・・ 基本認証の.csvを一時的にローカルファイルにダウンロードして、 Workbooks.Open "c:\temp.csv" で開こうと思い、少しチャレンジしてみました。 パターン的にサンプルがほしい時は、 site:www.microsoft.com Web 基本認証 "End Sub" と キーワードを書いた後に、"End Sub"で探すとよくサンプルが見つかります。 ※VBAやVBのプログラムはSub 〜 End Sub なので。 XML と Exchange 2000 による Web アプリケーション開発 http://www.microsoft.com/japan/msdn/exchange/exchange2000/devwebapps.asp で XMLHTTP によるコードの記述 XMLHTTP .OPEN があることを知る。 で次に、 site:www.microsoft.com xmlhttp open Web ページがアクセス可能かどうかを確認する方法はありますか http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0222.mspx Set objHTTP = CreateObject("MSXML2.XMLHTTP") objHTTP.Open "GET", strURL, FALSE objHTTP.Send Wscript.Echo(objHTTP.statusText) とか Set objHTTP = CreateObject("MSXML2.XMLHTTP") objHTTP.Open "GET", strURL, FALSE objHTTP.Send Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.CreateTextFile("script_center.htm", ForWriting) objFile.Write objHTTP.ResponseText objFile.Close なんて感じで、何か保存してますね。 次は、MSXML2.XMLHTTPの詳細が知りたいです。 ※基本認証可能か?知りたいです。 site:www.microsoft.com XMLHTTP .Open .Send [HOWTO] XMLHTTP を使用してバイナリ ストリームを送信する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;296772 ここに、 .setRequestHeader とヘッダー情報のセットが載っていたりする。。。 さてと、 Sub cccc() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'テスト用の認証ページに飛ぶ Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/test.csv" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objIE.navigate2 strURL, , , , strHEAD '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop 'XMLHTTPでローカルにダウンロードする Dim objHTTP As Object Set objHTTP = CreateObject("MSXML2.XMLHTTP") objHTTP.Open "GET", strURL, False objHTTP.setRequestHeader "Authorization", " Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objHTTP.Send MsgBox objHTTP.ResponseText End Sub とする、それらしく画面に出た・・と思ったら文字化けしてる・・・ objHTTP.ResponseText を保存して開きたいよなぁ。もしくはobjHTTP.ResponseTextを直接シートに貼り付けたいんだけどなぁ・・・ > 実験用に基本認証でくくられている場所に有るcsvファイルを用意できればいいのですが・・・ 私の通販用のサイトですが、 Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/test.csv" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf ここ上記の値でテストで使ってみてください。 もしソースをUPする時は、今回みたいに気をつけてくださいね。※本番用CODEをUPしないでね。 文字コードの件、少々探ってみます。 途中経過ですが、何かの参考となれば幸いです。 |
投稿時間:2006/05/02(Tue) 18:22 投稿者名:Ken3(管理者) Eメール: URL : タイトル:Re^3: 基本認証とcsvファイル 下記のような感じで、一時csvをローカルに保存して、 開いてみました。 Sub dddd() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'テスト用の認証ページに飛ぶ Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/test.csv" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objIE.navigate2 strURL, , , , strHEAD '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop 'XMLHTTPでローカルにダウンロードする Dim objHTTP As Object Set objHTTP = CreateObject("MSXML2.XMLHTTP") objHTTP.Open "GET", strURL, False 'URLとモードを教えてあげる 'ヘッダー情報を送る :(コロン)が入っていないことに注意・・これでハマった。 objHTTP.setRequestHeader "Content-Type", " text/xml; charset=UTF-8 " objHTTP.setRequestHeader "Authorization", " Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf '↑Authorization:のコロンは必要なし・・・ objHTTP.Send 'ここでデータがサーバーへ送られる と 同時にレスポンスが返る?? 'ここに読めなかったときのエラー処理を書きたいが・・・どうする??? 'メモリに読み込めたら、ファイルに落としたいので、 'ADODB.Stream で 読み込んだデータを書き込む Const adTypeBinary = 1 Const adSaveCreateOverWrite = 2 Dim objA As Object 'ADODB.Stream Dim strFILENAME As String 'ファイル名 strFILENAME = ActiveWorkbook.Path & "\tmp.csv" '現在のブック+tmp.csvとする Set objA = CreateObject("ADODB.Stream") objA.Type = adTypeBinary objA.Open objA.Write objHTTP.responseBody 'Streamに本文をそのまま代入 'そしてファイル.SaveToFileで書き込む objA.SaveToFile strFILENAME, adSaveCreateOverWrite '後始末 objA.Close '開けたら閉めようね。 Set objADOS = Nothing '変数も後始末 Set objHTTP = Nothing 'XMLオブジェクトも用なし objIE.Quit 'IEも用済みなので消えてもらう Set objIE = Nothing '変数も後始末 'やっとテンポラリができたので、 'ローカルに落ちたcsvをOpenする Workbooks.Open strFILENAME 'テンポラリのCSVを開きます End Sub もし、使えるようなら、エラー処理や一時ファイルの削除など肉付けをして使ってみてください。 何かの参考となれば幸いです。 |
投稿時間:2006/05/02(Tue) 18:29 投稿者名:Ken3(管理者) Eメール: URL : タイトル:Re^4: 基本認証とcsvファイル あっヤバイ |
投稿時間:2006/05/02(Tue) 18:38 投稿者名:Ken3(管理者) Eメール: URL : タイトル:Re^4: 基本認証とcsvファイル よく考えたらobjIEとか必要なかった・・・スミマセン。 Sub eeee() 'XMLHTTPでローカルにダウンロードする Dim objHTTP As Object Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/test.csv" Set objHTTP = CreateObject("MSXML2.XMLHTTP") objHTTP.Open "GET", strURL, False 'URLとモードを教えてあげる 'ヘッダー情報を送る :(コロン)が入っていないことに注意・・これでハマった。 objHTTP.setRequestHeader "Content-Type", " text/xml; charset=UTF-8 " objHTTP.setRequestHeader "Authorization", " Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf '↑Authorization:のコロンは必要なし・・・ objHTTP.Send 'ここでデータがサーバーへ送られる と 同時にレスポンスが返る?? 'ここに読めなかったときのエラー処理を書きたいが・・・どうする??? 'メモリに読み込めたら、ファイルに落としたいので、 'ADODB.Stream で 読み込んだデータを書き込む Const adTypeBinary = 1 Const adSaveCreateOverWrite = 2 Dim objA As Object 'ADODB.Stream Dim strFILENAME As String 'ファイル名 strFILENAME = ActiveWorkbook.Path & "\tmp.csv" '現在のブック+tmp.csvとする Set objA = CreateObject("ADODB.Stream") objA.Type = adTypeBinary objA.Open objA.Write objHTTP.responseBody 'Streamに本文をそのまま代入 'そしてファイル.SaveToFileで書き込む objA.SaveToFile strFILENAME, adSaveCreateOverWrite '後始末 objA.Close '開けたら閉めようね。 Set objADOS = Nothing '変数も後始末 Set objHTTP = Nothing 'XMLオブジェクトも用なし 'やっとテンポラリができたので、 'ローカルに落ちたcsvをOpenする Workbooks.Open strFILENAME 'テンポラリのCSVを開きます End Sub Win98と2000/XPでプログラムが切り替えられれば、、、う〜ん。。。 |
投稿時間:2006/05/02(Tue) 19:19 投稿者名:み Eメール: URL : タイトル:回答有難うございます 解答していただいたものをもとに一週間ほど調べたり考えたりしたいと思います。 |
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。