はじめまして。
WININETを使用してFTPモジュールを作成しているのですが、
FireWallの認証(IDとパスワード)を行ってからサーバに接続するには
どのような手続きが必要なのでしょうか?
自分が考えたのは
Sub Main()
Dim hInternet As Long
Dim hFtpSession As Long
Dim hSet As Long
hInternet = InternetOpen(Agent, _
INTERNET_OPEN_TYPE_PROXY, _
"FWサーバ名", _
vbnullstring, _
0)
hSet = InternetSetOption(hInternet, INTERNET_OPTION_PROXY_USERNAME, "FWユーザー名", Len("FWユーザー名"))
hSet = InternetSetOption(hInternet, INTERNET_OPTION_PROXY_PASSWORD, "FWパスワード", Len("FWパスワード"))
hFtpSession = InternetConnect(hInternet, _
"FWサーバ名", _
INTERNET_DEFAULT_FTP_PORT, _
"USER ユーザ名@ホスト名", _
"パスワード", _
INTERNET_SERVICE_FTP, _
0, _
0)
InternetCloseHandle(hFtpSession)
InternetCloseHandle(hInternet)
End Sub
このようなソースを書いたのですがうまくいきませんでした。
ちなみにInternetSetOptionのすぐあとに出力されたエラーコードは12018でした。
ハンドルがおかしいのかなと思ったのですが、戻り値は0なのでどうしてよいのかわからなくなりました。
API宣言は別モジュールで行っています。
ご助言お願いします。
今ちょっとかなり忙しいので詳しく見ていないが、
エラーは FormatMessageで書式化出来る、
ちなみに12018は
『要求された処理に対して、指定したハンドルの種類が正しくありません。』
でした、心当たりは?
ところで『vbnullstring』はなぜ『vbNullString』となってないの?
InternetOpenがおかしいのでは。
コメントありがとうございます。
FireWallを経由しない場合をテストしたときは
正しく動作したので心当たりがない状況です・・。
ハンドルはInternetOpenで作成したハンドルではないのですか?
vbnullstringの件は、
もともとPublic Constで明示的にvbNullStringにしていたので、
わかりやすくするつもりでここで直接書き直しました。
混乱を招いてしまったのならごめんなさい。
これかな。
http://support.microsoft.com/?scid=kb;ja;324898&spid=2073&sid=154
>これかな。
>http://support.microsoft.com/?scid=kb;ja;324898&spid=2073&sid=154
InternetQueryOption() は使っていないんですけど
なにか密接な関係があるのでしょか・・?
>InternetQueryOption() は使っていないんですけど
>なにか密接な関係があるのでしょか・・?
関係ないかも・・・orz
Len("FWユーザー名") -> Len("FWユーザー名") + 1
Len("FWパスワード") -> Len("FWパスワード") + 1
これでもだめですかね。
>Len("FWユーザー名") -> Len("FWユーザー名") + 1
>Len("FWパスワード") -> Len("FWパスワード") + 1
>これでもだめですかね。
試してみましたが、だめでした・・・。
依然同じエラーコードが出ます。
ぱっと見...
F/W経由なら InternetConnectのフラグに
INTERNET_FLAG_PASSIVE を追加する必要があるかも。
あと、
環境が書かれていないが、OSが何か?IEが5か6か?で違いはありますか?
"FWユーザー名", Len("FWユーザー名")
のところは、文字列終端がNull(0x00)でちゃんと終わっているのか?
それから、いわゆる全角文字がもしも含まれているのであれば、Lenじゃマズイよな。
という感じですが。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/setting_and_retrieving_internet_options.asphttp://support.microsoft.com/default.aspx?scid=kb;ja;175179
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200312/03120119.txt
もげさんコメントありがとうございます。
すみません OSはWindows2000 Service pack 4
IEのバージョンは6.0です
>"FWユーザー名", Len("FWユーザー名")
>のところは、文字列終端がNull(0x00)でちゃんと終わっているのか?
>それから、いわゆる全角文字がもしも含まれているのであれば、Lenじゃマズイよな。
全角は含まれていません。文字列終端がNullというのは、
仮にFWユーザ名が'user'の場合、Len("user")ではだめなのですか?
そこのなにかしらのヌルコードを含めるのですか?
>F/W経由なら InternetConnectのフラグに
>INTERNET_FLAG_PASSIVE を追加する必要があるかも。
追加したのですが、変化ありませんでした・・。
お使いのプロキシはCERNベースですか?
http://support.microsoft.com/?id=216214
>お使いのプロキシはCERNベースですか?
CERNベースかどうかどこで判断すればよいでしょうか・・?
また
>http://support.microsoft.com/?id=216214
を閲覧してみたところ、InternetOpenUrlのハンドルを使用するらしいですが、
もし使うならURLは"ftp:〜"ではじまればよいですか?
>CERNベースかどうかどこで判断すればよいでしょうか・・?
システム管理者や、お使いのプロキシを提供しているメーカに聞いてみてください。
もしくは、使用しているF/W(プロキシ)の製品名を開示すれば、
経験者のコメントが得られるかもしれません。
>http://support.microsoft.com/?id=216214
上記URLの一文で、
「ただし、 FTP プロトコルによる FTP サーバーにプロキシが次に接続します。 このファクトは、特定の FtpOpenFile や FtpPutFile などの WinInet FTP API を使用するのが不可能行います。」
という記述がありました。もし「CERNベース」だとファイルのアップロードができないような印象があります。
ですが(フリーソフトの)FFFTPを使ってFireWall経由での接続ができるので、
別の要因があるのではないかと思いました。
>「CERNベース」だとファイルのアップロードができないような印象があります。
そんなことはありません。
自動翻訳をそのまま読んでるからですかね。
こっちの図のほうが判りやすいかも。
http://support.microsoft.com/kb/166961/EN-US/
>(フリーソフトの)FFFTPを使ってFireWall経由での接続ができるので、
はいはい。その方向からアプローチするなら、ソースが公開されてるので、
それを参考にしてみるとか(Sota殿はwininetAPIは使ってないですね)。
http://www2.biglobe.ne.jp/~sota/ffftp.html
>こっちの図のほうが判りやすいかも。
図を見て思ったのが、プロキシサーバにはHTTP通信するみたいなのですが、
それは目的のファイルがない場合でも可能なのでしょうか・・?
最終目的としてファイルのアップロードがしたいので、接続時には固定URLを使えないのかなと。
>はいはい。その方向からアプローチするなら、ソースが公開されてるので、
>それを参考にしてみるとか(Sota殿はwininetAPIは使ってないですね)。
参考にしたいのですがC言語はわからないしWinInetも使ってないので自分には理解できませんでした・・。