webサーバにリクエストを送信するには?

解決


ねむねむ  2007-12-15 23:37:27  No: 99941

はじめまして。
初めて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


魔界の仮面弁士  2007-12-15 23:55:26  No: 99942

> 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

のようにした方が楽かと思いますよ。


ねむねむ  2007-12-16 00:25:42  No: 99943

回答ありがとうございます。

>気になるのは、コードの後半部は Web サーバに対する通信のはずなのに、
>「FtpHost」や「FtpUrl」を渡しているという点ですね。

実はFTPサーバ=WEBサーバですので、FtpHostやFtpUrlの変数内は問題ないと思われます。
FtpHostにはサーバのホストが("www.XXX.info")、FtpUrlには、PHPの実行環境のURLが("/test/uploader.php")入っています。

GETリクエストはAPIを使用しなくてもできるのですね!
早速試してみます。
解決しましたらまたご報告差し上げます。ありがとうございました。


ねむねむ  2007-12-16 01:18:22  No: 99944

魔界の仮面弁士さま、ありがとうございます。
APIを使用しない方法で解決しました・・・と思います。

というのが、どうもPHP側でエラーが出ているようで(req.ResponseBodyで確認しました)、上手くテストできなかったのです・・・。
PHP担当者に、また月曜日にでも確認してもらおうと思います。

何はともあれ、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加