tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルWinInetによるログイン
記事No15920
投稿日: 2014/07/04(Fri) 13:14
投稿者K34
VBA API 初心者です。
現在、下記の要領でExcelアドインを作成しています。
@URLを指定して業務システムへ自動でログイン
AURLを指定してエクセルファイルをダウンロード
Bその後ファイルを任意の場所に解凍。

とあるサイトを見て、以下のコードを書きましたが
恐らくログインができていないのか、ZIPファイルは取得されますが、
中身のエクセルファイルは数字が入っていない状態です。
※レイアウトと数式も表示されます。

    'WinInetを初期化
    hOpen = InternetOpen("Excel VBA", _
                         INTERNET_OPEN_TYPE_DIRECT, _
                         vbNullString, vbNullString, 0)

        'URLを開く
    hConnect = InternetOpenUrl(hOpen, _
                   url, _
               vbNullString, 0, _
                   INTERNET_FLAG_RELOAD, 0)


VBA初心者であるため、ほとんどWEBからコピーしてきたものですが、HTTP_Postを行った
場合は正常にログインできています。しかし、その後のWininetを利用したURL関連の操作に
ログイン情報が引き継がれていないためログインされていないものとして処理されていると
思われます。このログインをWininetを利用したものに変更するか、もしくは他の方法で
先述の処理ができればと考えています。
※コードを提供していただければ、後はこちらで解析して見ます。

非常に困っておりますので、どなたかのアドバイスをいただきたくお願いいたします。

[ツリー表示へ]
タイトルRe: WinInetによるログイン
記事No15927
投稿日: 2014/07/08(Tue) 11:54
投稿者魔界の仮面弁士
ひとくちに「ログイン」といっても、Windows 認証、BASIC 認証、OpenID認証、
一時的 Cookie を用いる方法、QueryString でセッションIDを保持する方法などなど
多種多様なログイン手法が存在しており、それによって必要なコードも異なってきます。

現象を再現させられるだけの情報があるわけではないので、
具体的な改善策を挙げることはできませんが、一応回答:


> 恐らくログインができていないのか、ZIPファイルは取得されますが、
> 中身のエクセルファイルは数字が入っていない状態です。

Web ブラウザー経由では正常に受信できますか?

もしそうであれば、「Fiddler」あるいは「Microsoft Network Monitor」を用いて、
正常受信時と失敗時とで、HTTP 通信の内容にどのような差異があるのかを
調査してみては如何でしょうか。

[ツリー表示へ]
タイトルRe^2: WinInetによるログイン
記事No15928
投稿日: 2014/07/08(Tue) 15:10
投稿者k34
魔界の仮面弁士さん、ご返信ありがとうございます。

> ひとくちに「ログイン」といっても、Windows 認証、BASIC 認証、
> OpenID認証、一時的 Cookie を用いる方法、QueryString で
> セッションIDを保持する方法などなど多種多様なログイン手法が
> 存在しており、それによって必要なコードも異なってきます。
>

ログインはWEBサーバなので、LDAP認証でログインを行っています。


> > 恐らくログインができていないのか、ZIPファイルは
> > 取得されますが、中身のエクセルファイルは
> > 数字が入っていない状態です。
>
> Web ブラウザー経由では正常に受信できますか?

ブラウザー経由とは手動で行うということでしょうか?
手動で行う場合は正常に受信できていますが、
IEオブジェクトを利用しても正常には受信できません。

また、七転八倒したあげくにHTTP通信による
POST処理でログインして、
その後にGET処理を行う方式に変更
しましたが、こちらでも同様の現象がでて
上手くいっていません。

※コードを書くと何故か投稿できませんが、
 「MSXML2.XMLHTTP」を利用した方法です。

[ツリー表示へ]
タイトルRe^3: WinInetによるログイン
記事No15931
投稿日: 2014/07/08(Tue) 15:57
投稿者魔界の仮面弁士
> ログインはWEBサーバなので、LDAP認証でログインを行っています。

認証サーバーとの通信部は LDAP で管理されているとして、
Web サーバーとの通信部はどうなっていますか?

Web の通信そのものは、LDAP プロトコルではなく、HTTP プロトコルに
載せているので、LDAP 認証を利用するために、BASIC 認証に載せるなり、
getAccess や Clear Trust などの認証システムを経由させるなどの手順が
行われているように思います。


> ブラウザー経由とは手動で行うということでしょうか?
> 手動で行う場合は正常に受信できていますが、
> IEオブジェクトを利用しても正常には受信できません。
先ほど紹介したツールで、「手動」の場合とそれ以外との方法とで、
通信内容の差異を実際に比較されていますか?

何が原因で失敗しているのかを、実環境で調査してみないことには、
それを回避するためのコーディングを行うこともできませんので…。


> また、七転八倒したあげくにHTTP通信による
# 七顛八倒(七転八倒) ではなく、七転八起 の方が合ってるかも。


> POST処理でログインして、
> その後にGET処理を行う方式に変更
> しましたが、こちらでも同様の現象がでて
> 上手くいっていません。
最初のログイン処理が成功した場合、サーバー側からログインされたことを示す
何かしらの情報が返却されていると思います。

それは例えば、揮発性クッキーであったり、リダイレクト先の URL を持った json 文字列であったり、
WWW-Authenticate ヘッダーであったりなどなど、認証方法によって異なるわけですが、いずれにせよ
二回目以降の接続ではそうした情報を読取って、後続処理ではそれを付与したリクエストを
発行せねばなりません。

そのためのコードは、どのように記述されていますか?

もしも認証情報を引渡すコードが無いのであれば、サーバー側から見ると
後続処理は、未ログイン状態で呼び出されているものとして処理されると思います。


> ※コードを書くと何故か投稿できませんが、
>  「MSXML2.XMLHTTP」を利用した方法です。
【掲示板ご利用に際し】http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban
の 6.1.4. 項に抵触した投稿になっていないか、もう一度確認してみて下さい。

ちなみに古いバージョンの XMLHTTP は、Location: がレスポンスヘッダーに
指定されている場合、誤動作を起こす可能性があります。最新版をインストールして
あるかどうかも確認してみて下さい。

[ツリー表示へ]