はじめまして。
初めてweb関連のプログラム作成をすることとなり、調べつつ作成しておりましたが、詰まってしまいましたので教えていただければありがたいです。
作成しようとしているプログラムは、
VBのプログラムからFTP接続でCSVをWEBサーバに送り、WEBサーバにリクエストを送信して、リクエストを受けたWEBサーバ上のPHPを動作させるというものです。
FTPの部分は上手くいってるのですが、HttpSendRequestの処理部分で12018のエラーコードが返されてしまいます。
PHP側の動作は自分が作成していないのでまったく不明なのですが、"GET"で送ればいいことは聞いています。リクエストの送信自体ができていないということはVB側の落ち度ですよね?
以下ソース↓
- - - - - - - - - -
'インターネットサービスのハンドル取得 - hOpen
hOpen = InternetOpen("aaa", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
If (hOpen <> 0) Then 'ハンドル取得成功
'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection
hConnection = InternetConnect(hOpen, FtpHost, INTERNET_DEFAULT_FTP_PORT, _
FtpUser, FtpPass, INTERNET_SERVICE_FTP, 0, 0)
If (hConnection <> 0) Then '接続成功
'FTPサーバのカレントディレクトリを変更
result = FtpSetCurrentDirectory(hConnection, FtpPath)
If (result <> 0) Then 'ディレクトリ変更成功
'--------(省略)----------
'FTPサーバにCSV送信
'--------(省略)----------
Else
'FTPサーバでのディレクトリの移動に失敗しました
GoTo NomalExit
End If
Else
'FTPサーバへ接続できませんでした
GoTo NomalExit
End If
'インターネットセッションを閉じる
If (hConnection <> 0) Then InternetCloseHandle hConnection
'インターネットセッションのハンドル取得(要求送信) - hConnection
hConnection = InternetConnect(hOpen, FtpHost, INTERNET_DEFAULT_HTTP_PORT, _
vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0, 0)
If (hConnection <> 0) Then '接続成功
'要求データ作成
result = HttpOpenRequest(hConnection, "GET", FtpUrl, "HTTP/1.1", vbNullString, vbNullString, INTERNET_FLAG_RELOAD, 0)
If (result = 0) Then
'要求データ作成に失敗しました
GoTo NomalExit
End If
'要求送信
result = HttpSendRequest(hConnection, vbNullString, 0, vbNullString, 0)
If (result = 0) Then
'要求送信に失敗しました
GoTo NomalExit
End If
Else
'HTTPサーバへ接続できませんでした
GoTo NomalExit
End If
Else
'インターネットサービスへ接続できませんでした
GoTo NomalExit
End If
'インターネットセッションを閉じる
If (hConnection <> 0) Then InternetCloseHandle hConnection
'インターネットサービスを閉じる
If (hOpen <> 0) Then InternetCloseHandle hOpen
> 12018のエラーコードが返されてしまいます
そのコードだと、意味としては
『要求された処理に対して、指定したハンドルの種類が正しくありません』
ですかね。
気になるのは、コードの後半部は Web サーバに対する通信のはずなのに、
「FtpHost」や「FtpUrl」を渡しているという点ですね。
(変数の内容が分からないので、間違いかどうかは判断できませんけれども)
それと、HTTP の GET リクエストだけなら、API を使うよりも、
'Dim req As MSXML2.XMLHTTP
'Set req = New MSXML2.XMLHTTP60
Dim req As Object
Set req = CreateObject("MSXML2.XMLHTTP")
req.open "GET", "http://www.google.co.jp/", False
req.send
If req.Status = 200 Then
Debug.Print req.responseText
End If
のようにした方が楽かと思いますよ。
回答ありがとうございます。
>気になるのは、コードの後半部は Web サーバに対する通信のはずなのに、
>「FtpHost」や「FtpUrl」を渡しているという点ですね。
実はFTPサーバ=WEBサーバですので、FtpHostやFtpUrlの変数内は問題ないと思われます。
FtpHostにはサーバのホストが("www.XXX.info")、FtpUrlには、PHPの実行環境のURLが("/test/uploader.php")入っています。
GETリクエストはAPIを使用しなくてもできるのですね!
早速試してみます。
解決しましたらまたご報告差し上げます。ありがとうございました。
魔界の仮面弁士さま、ありがとうございます。
APIを使用しない方法で解決しました・・・と思います。
というのが、どうもPHP側でエラーが出ているようで(req.ResponseBodyで確認しました)、上手くテストできなかったのです・・・。
PHP担当者に、また月曜日にでも確認してもらおうと思います。
何はともあれ、ありがとうございました。
ツイート | ![]() |