- PR -

[急] Msxml2.XMLHTTP.3.0について

投稿者投稿内容
EarlyHero
常連さん
会議室デビュー日: 2007/03/16
投稿数: 37
お住まい・勤務地: 福岡県
投稿日時: 2007-12-19 18:25
こんにちは、Earlyheroです。

以下のVBSでサイトにアクセスしようとしています。

現状アクセスはできていますが、仮にサイトにアクセスできなくなった場合、
このままでは「send」した後にアクセスできずに止まってしまいます。

「open」した後に例外(アクセス不可)を判定したいのですが、
どなたか方法をご存知の方はいらっしゃらないでしょうか?

例外時は「WScript.Quit(番号)」で止めて番号を返したいと思っています。

----------------------------------------------------------------------
Option Explicit

Dim args
Dim http
Dim url

Set args = WScript.Arguments
Set http = CreateObject("Msxml2.XMLHTTP.3.0")

url = "http://(アクセスしたいサイト)"
Call http.open("POST", url, false)
Call http.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
Call http.send("file=" & args(0))
----------------------------------------------------------------------

お手数をおかけしますが、宜しくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-12-19 18:35
引用:

EarlyHeroさんの書き込み (2007-12-19 18:25) より:
こんにちは、Earlyheroです。

以下のVBSでサイトにアクセスしようとしています。

現状アクセスはできていますが、仮にサイトにアクセスできなくなった場合、
このままでは「send」した後にアクセスできずに止まってしまいます。

「open」した後に例外(アクセス不可)を判定したいのですが、
どなたか方法をご存知の方はいらっしゃらないでしょうか?

例外時は「WScript.Quit(番号)」で止めて番号を返したいと思っています。

----------------------------------------------------------------------
Option Explicit

Dim args
Dim http
Dim url

Set args = WScript.Arguments
Set http = CreateObject("Msxml2.XMLHTTP.3.0")

url = "http://(アクセスしたいサイト)"
Call http.open("POST", url, false)
Call http.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
Call http.send("file=" & args(0))
----------------------------------------------------------------------

お手数をおかけしますが、宜しくお願いします。


タイムアウトしない、ということですか?
EarlyHero
常連さん
会議室デビュー日: 2007/03/16
投稿数: 37
お住まい・勤務地: 福岡県
投稿日時: 2007-12-20 09:12
おはようございます。EarlyHeroです。

この件も急いでいたのですが、別件も大忙しだったので返信が遅れてしまいました。
Jittaさん、急いでいただいたのに申し訳ありません。

「Call http.open("POST", url, false)」で「false」にしているため
タイムアウトせずに次の処理に向かっているようです。

「true」(またはパラメータを2つ)にするとタイムアウトするまで待つ
ようですが、結構時間がかかります。
なるべく早く判断したいので、「false」にしています。

なので、「open」した後にアクセスできなかったことを判断したいと
思っています。そんなことって可能でしょうか?



[ メッセージ編集済み 編集者: EarlyHero 編集日時 2007-12-20 09:13 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-12-20 10:42
コールバックでレスポンスコードを判定ではだめなんですか?
EarlyHero
常連さん
会議室デビュー日: 2007/03/16
投稿数: 37
お住まい・勤務地: 福岡県
投稿日時: 2007-12-20 10:48
こんにちは、EarlyHeroです。

「コールバックでレスポンスコードを判定」とは具体的に
どのような処理になるのでしょうか?

レスポンスコード(応答値)を取得することでアクセスできたかどうか
判定できるということでよろしいでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-12-20 11:41
openの段階で送信していないのでは?

引用:

「Call http.open("POST", url, false)」で「false」にしているため
タイムアウトせずに次の処理に向かっているようです。

「true」(またはパラメータを2つ)にするとタイムアウトするまで待つ
ようですが、結構時間がかかります。
なるべく早く判断したいので、「false」にしています。


第3引数は非同期か同期のオプションです。意味を勘違いしていませんか?
falseにすると非同期なので、直後にステータスコードを確認することは出来ません。
readyStateをチェックして完了になるまで待機する必要があります。

VBScriptはよく知りませんが、一般的にブラウザ+JavaScriptでは、
非同期通信の際にreadyStateの変更イベントを受け取るようにコーディングします。

さらに言うと、HTTPサーバは調子がよかろうと悪かろうと、
リクエスト元に対して常に都合のいいように状態を返すとは限りません。
正常でもリクエストを捕まえてレスポンスを中々返さない場合もあります。

ヒントになったでしょうか。
EarlyHero
常連さん
会議室デビュー日: 2007/03/16
投稿数: 37
お住まい・勤務地: 福岡県
投稿日時: 2007-12-20 11:59
こんにちは、EarlyHeroです。

第3引数は勘違いしていました。ご指摘ありがとうございます。

今回のように第3引数をfalseにして非同期にした場合
@readyStateプロパティの変更イベントを受け取るようにコーディングする
AHTTPサーバーからレスポンスがなかなか返ってこない場合があるので、
 レスポンス待ちの制御を加える

@、Aともにコーディングの方法が分かりません。

実際のところ非同期にしていても遅くなる可能性があるということになりますね。
タイムアウトするまで我慢強く待つのとあまり変わらないのであれば
考え直さないといけないかもしれません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-12-20 19:43
引用:

EarlyHeroさんの書き込み (2007-12-20 11:59) より:
こんにちは、EarlyHeroです。

第3引数は勘違いしていました。ご指摘ありがとうございます。

今回のように第3引数をfalseにして非同期にした場合
@readyStateプロパティの変更イベントを受け取るようにコーディングする
AHTTPサーバーからレスポンスがなかなか返ってこない場合があるので、
 レスポンス待ちの制御を加える

@、Aともにコーディングの方法が分かりません。:cry:

実際のところ非同期にしていても遅くなる可能性があるということになりますね。
タイムアウトするまで我慢強く待つのとあまり変わらないのであれば
考え直さないといけないかもしれません。


最初の投稿にある、「アクセスできなくなった場合」というのは、具体的にどんなことを想定していますか?
DoSを受けていて反応できない
サーバーがシャットダウンしていて、全く反応しなかった
など、タイムアウトまで待たなければいけなさそうな状況もあると思います。

スキルアップ/キャリアアップ(JOB@IT)